冻结一旦我这是怎么关闭套接字:关闭套接字()在一段时间
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个插座后,它发生是随机的插座不想要close和closesocket()永远挂在关键部分(使用调试器发现这一点)。
我在做什么错了?
编译:的Visual Studio 2010 SP1(C++) 操作系统:Windows Server 2008 R2 x64的
感谢。
如果您知道它正在等待临界区对象,那么您可以使用windbg中的命令!locks来确定哪个线程拥有哪些临界区对象。这很可能是死锁。 – nanda