VxWorks网络系统(2) – setsockopt设置套接字选项函数

原创 2007年09月25日 15:02:00

 

VxWorks网络系统(2) – setsockopt设置套接字选项函数  

// Make the socket sending alive messages when connected
int flag = 1;
setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&flag, sizeof(flag));
 
// increase receive buffer size
flag = SOCKET_BUF_SIZE;
setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char*)&flag, sizeof(flag));
 
// increase send buffer size
setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (char*)&flag, sizeof(flag));
 
// try without the nagle algorithm
flag = 1;
setsockopt (m_socket, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof (flag));
 
// Prevent "bind error 48"!
flag = 1;
setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, sizeof(flag));
 
SOCK_STREAM型套接字支持SO_KEEPALIVE选项,SOCK_DGRAM型套接字不支持。缺省没有启用保活机制。基本套接口选项SO_KEEPALIVE用于检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自动给对方发一个保持存活探测分节(keep alive probe)。这是一个对方必须响应的TCP分节. 它会导致以下三种情况:对方接收一切正常:以期望的ACK响应。2小时后,TCP将发出另一个探测分节。对方已崩溃且已重新启动:以RST响应。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。对方无任何响应:源自berkeleyTCP发送另外8个探测分节,相隔75秒一个,试图得到一个响应。在发出第一个探测分节11分钟15秒后若仍无响应就放弃。套接口的等待处理错误被置为ETIMEOUT,套接口本身则被关闭。如ICMP错误是“host unreachable(主机不可达)”,说明对方主机并没有崩溃,但是不可达,这种情况下待处理错误被置为EHOSTUNREACH
 
IPPROTO_TCP: TCP套接口
 
尽管有许多TCP选项可供程序员操作,而我们却最关注如何处置其中的两个选项,它们是TCP_NODELAY TCP_CORK,这两个选项都对网络连接的行为具有重要的作用。
TCP_NODELAYTCP_CORK基本上控制了包的“NagleNagle化在这里的含义是采用Nagle算法把较小的包组装为更大的帧。现在让我们假设某个应用程序发出了一个请求,希望发送小块数据。我们可以选择立即发送数据或者等待产生更多的数据然后再一次发送两种策略。如果我们马上发送数据,那么交互性的以及客户/服务器型的应用程序将极大地受益。例如,当我们正在发送一个较短的请求并且等候较大的响应时,相关过载与传输的数据总量相比就会比较低,而且,如果请求立即发出那么响应时间也会快一些。以上操作可以通过设置套接字的TCP_NODELAY选项来完成,这样就禁用了Nagle算法。
 
SO_REUSEADDR选项的设置将套接口设置成重新使用旧的地址(IP地址加端口号)而不等待.
如果一个socket绑定了某个端口,该socket正常关闭或程序退出后,在一段时间内该端口依然保持被绑定的状态,其他程序(或者重新启动的原程序)无法绑定该端口。这由 TCP 套接字状态TIME_WAIT引起。该状态在套接字关闭后约保留 2 4 分钟。在TIME_WAIT状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。等待TIME_WAIT结束可能是令人恼火的一件事,特别是如果您正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启。幸运的是,有方法可以避开TIME_WAIT状态。可以给套接字应用SO_REUSEADDR套接字选项,以便端口可以马上重用。

setsockopt()函数在VxWorks中的使用说明

setsockopt( ) NAME setsockopt( ) - set socket options SYNOPSIS STATUS setsockopt ( ...
  • kulala082
  • kulala082
  • 2016年11月30日 14:13
  • 686

基于Vxworks的Socket编程

近段时间接触一个Vxworks的项目,写了一些关于
  • wtchappy
  • wtchappy
  • 2014年07月06日 12:42
  • 1901

vxworks下socket编程 TCP 通信

vxworks 下socket编程 TCP 通信头文件  #ifndef  _INC_TCPSOCKET_H #define  _INC_TCPSOCKET_H   #ifdef  _...
  • flyingleo1981
  • flyingleo1981
  • 2013年11月14日 18:40
  • 3920

VxWorks的Socket应用框架

Socket应用框架 一、BSDsocket常常构造两种应用类型: 1、面向连接的SOCK_STREAM应用:它是基于TCP协议的应用。 连接后双方数据以流的形式发送和接收,可以通过I/...
  • Qingziyuan
  • Qingziyuan
  • 2016年11月04日 17:48
  • 667

《VxWorks学习笔记》——任务属性

VxWorks任务区别于通用系统的两个特点:1)VxWorks任务与内核具有相同的权限,能够执行处理器支持的全部指令。2)所有任务和内核共享同一实地址空间,不同任务的数据没有任何保护机制。 1、  ...
  • iot_hept
  • iot_hept
  • 2015年03月26日 08:39
  • 1093

vxworks下基于select的TCP服务器端设计

#include #include #include #include #define DEFAULT_SERVER_PORT 6699 int server; SEM_ID Serve...
  • kulala082
  • kulala082
  • 2016年12月08日 11:25
  • 323

vxworks下select()的使用

select()作用是挂起一系列的文件描述符,其API为:int select    (    int              width,      /* number of bits to ex...
  • bobpipi
  • bobpipi
  • 2009年05月21日 16:44
  • 4313

vxworks中TCP例子

#include "vxWorks.h"  #include "sockLib.h" #include "inetLib.h" #include "stdioLib.h"  #include ...
  • woquNOKIA
  • woquNOKIA
  • 2014年10月27日 14:35
  • 1042

套接字选项

转自:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/06/2624504.html 1.getsockopt和setsockopt函数...
  • sclcy
  • sclcy
  • 2016年07月20日 17:10
  • 747

VxWorks的Socket通信(二)

1、Socket类型有三种: 可靠的数据流:SOCK_STREAM; 数据报:SOCK_DGRAM; 裸层:SOCK_RAM; 其特点如下: 2、socket端点地址是区分唯一不同的...
  • Qingziyuan
  • Qingziyuan
  • 2016年11月04日 16:01
  • 530
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VxWorks网络系统(2) – setsockopt设置套接字选项函数
举报原因:
原因补充:

(最多只允许输入30个字)