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()函数使用详解

1. closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCK...

UNIX网络编程——套接字选项(setsockopt)

setsockopt的一些用法:close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BOOL bReuseaddr=TRUE; setsockopt(...

setsockopt()设置套接字的选项

setsockopt() 简述 设置套接字的选项。 #include int PASCAL FAR setsockopt(SOCKET s,int level,int optname, c...

套接字选项setsockopt()

套接字选项这个话题在socket编程里,可能已经属于中高级话题了,之所以在 一开始就把这个话题提上来讲,是因为我们的一个近阶段目标是能够把 MY_PF_INET域的RAW协议走通,并在上面跑起一个pi...

socket默认的套接字选项,setsockopt/getsockopt

一、getsockopt/setsockopt 函数 #include /* See NOTES */ #include int ge...

Linux网络编程之套接字选项设置

转自 http://blog.csdn.net/chenjin_zhong/article/details/7268939 1.介绍 在Linux网络编程中,有时需要设置地址复用,允许...

linux socket套接字超时之setsockopt以及各网络接口超时判断

概述 对于一个套接字的读写(read/write)操作默认是阻塞的,如果当前套接字还不可读/写,那么这个操作会一直阻塞下去。可以在进行读写操作的时候可以指定超时值,这样就读写操作就不至于一直...
  • bytxl
  • bytxl
  • 2015年09月15日 10:56
  • 1242

我的网络编程学习之路——套接字选项

1.1 概述 我们可以使用很多方法来获取和设置影响套接字的选项: getsockopt 和 setsockopt 函数;fcntl 函数;ioctl 函数。 我们会从介绍getsockopt 和 ...

UNIX网络编程——套接字选项(SOL_SOCKET级别)

#include int setsockopt( int socket, int level, int option_name,const void *option_value, size_t op...

UNIX网络编程——套接字选项(心跳检测、绑定地址复用)

/* 设置套接字选项周期性消息检测连通性 心跳包、 心博。主要用于长连接。 * 参数:套接字, 1或0开启, 首次间隔时间, 两次间隔时间, 断开次数 */ void setKeepAlive( ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VxWorks网络系统(2) – setsockopt设置套接字选项函数
举报原因:
原因补充:

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