1. SO_REUSEADDR
如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:
BOOL bReuseaddr=TRUE;
setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
2. SO_LINGER
如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程:
/* BOOL bDontLinger = FALSE;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); */
在centos6.3(linux 2.6)中做如下设置:
struct linger lin ;
lin.l_onoff = 1; lin.l_linger=0;
setsockopt(sock,SOL_SOCKET,SO_LINGER,&lin,sizeof(struct linger));
3.SO_SNDTIMEO SO_RCVTIMEO
在send(),recv()过程中有时由于网络状况等原因,发收不能预期进行,而设置收发时限:
struct timeval {
long tv_sec;