gpt4 book ai didi

windows - closesocket() 偶尔卡住一次

转载 作者:可可西里 更新时间:2023-11-01 11:58:05 26 4
gpt4 key购买 nike

这是我关闭套接字的方式:

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

谢谢。

最佳答案

CancelIo 函数不是同步的,或者至少,它没有被证明是同步的。如果该套接字上的 I/O 处于挂起状态,您应该等到收到确认 I/O 已取消的完成通知(或者,可能在取消请求排队之前成功完成)。

一旦收到完成通知,关闭套接字应该是安全的。

关于windows - closesocket() 偶尔卡住一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com