これは私がソケットを閉じる方法です:
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++) OS: Windows Server 2008 R2 x64
ありがとう。