这就是我关闭套接字的方式:
LINGER lingerStruct;
lingerStruct.l_onoff = 1;
lingerStruct.l_linger = 0;
setsockopt(Clients[iClientID].ClientSocket, SOL_SOCKET, SO_LINGER, (char*)&lingerStruct, sizeof(lingerStruct));
CancelIo((HANDLE)Clients[iClientID].ClientSocket);
shutdown(Clients[iClientID].ClientSocket, SD_BOTH);
closesocket(Clients[iClientID].ClientSocket); // << Hangs here
经过大约 2~10 小时的运行时间并关闭超过 500 个套接字后,碰巧该随机套接字不想关闭并且 closesocket() 永远挂在关键部分(使用调试器发现这一点)。
我究竟做错了什么?
编译器:Visual Studio 2010 SP1 (C++) 操作系统:Windows Server 2008 R2 x64
谢谢。