下面代码,每隔段时间执行一次,发现创建了很多个端口显示TIME_WAIT,执行了close为何端口不能彻底关闭!
CSocket* pSocket;
pSocket=new CSocket;
ASSERT(pSocket);
pSocket->Create())
pSocket->Connect(IP,nPort)
.....
pSocket->Close();//关闭端口
delete pSocket;
return TRUE;
CSocket* pSocket;
pSocket=new CSocket;
ASSERT(pSocket);
pSocket->Create())
pSocket->Connect(IP,nPort)
.....
pSocket->Close();//关闭端口
delete pSocket;
return TRUE;
BOOL CClientSocket::Close ()
{
if (INVALID_SOCKET != m_hSocket)
{
// shutdown(m_hSocket,2);
int iClose = closesocket(m_hSocket);
if (iClose == SOCKET_ERROR)
{
TRACE(_T("closesocket() socket error: %d..\n"),GetLastError ());
}
if (WSACleanup () == SOCKET_ERROR)
{
TRACE(_T("WSACleanup () socket error: %d..\n"),GetLastError ());
}
}
m_hSocket = INVALID_SOCKET;
m_bConnected = FALSE;
return TRUE;
}
{
LINGER lingerStruct;
lingerStruct.l_onoff = 1;
lingerStruct.l_linger = 0;
setsockopt(m_hSocket, SOL_SOCKET, SO_LINGER,(char *)&lingerStruct, sizeof(lingerStruct) );
return CSocket::Close();
}
其中TIME_WAIT状态要维持2MSL时间(几分钟吧,不同系统有不同的MSL时间)。P.S. MSL:Maximum Segment Lifetime(报文段最大生存时间)