服务器和子客户在同一台机器上
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
void ForceCloseSocket(SOCKET &s,bool bClose)
{
bool bDontLinger=false;
setsockopt(s,
SOL_SOCKET,
SO_DONTLINGER,
(char *)&bDontLinger,
sizeof(bool)); linger InternalLinger;
InternalLinger.l_onoff=1;
InternalLinger.l_linger=0;
setsockopt(s,
SOL_SOCKET,
SO_LINGER,
(const char*)&InternalLinger,
sizeof(linger));
if(bClose)
{
closesocket(s);
s=INVALID_SOCKET;
}
}
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
int iRes=closesocket(s);
s=NULL;
return iRes;问题依旧啊 怪异了啊 我看了msdn上写的 这个选项确实是 去掉TIMEWAIT的 可是我用了没效果
Does not block close waiting for unsent data to be sent. Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero.是不是我设置反了。。
反着设置貌似没问题了。
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&nReuseOn, sizeof(nReuseOn));将端口设置成可重用