gpt4 book ai didi

c++ - Windows 上的非阻塞套接字在 send() 调用后不返回

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:39 24 4
gpt4 key购买 nike

我希望有人能解释一种情况——任何情况——非阻塞 Windows 套接字在使用 send() 后不会立即返回。在其他平台上,我的代码按预期运行,因此它似乎是特定于 Windows 的问题。

我判断它没有返回的方法非常简单:我在 send() 函数前后立即 cout 一条消息,运行时,控制台仅显示第一条消息。我似乎无法在简化的示例中重现它,因此对于缺少代码我深表歉意。如有必要,我会尝试提供更多细节。

编辑:

创建socket并设置为非阻塞的具体代码如下。我假设非阻塞套接字确实不可能以这种方式运行,并且其他原因导致它在显示第二条消息之前停止。无论如何,谢谢你的帮助……我会尽我最大的努力去查个水落石出,但现在我很困惑。

SOCKET new_sock = accept(sock, (struct sockaddr*)&addr, &addr_size);

#ifdef _WIN32
unsigned long ul;
ioctlsocket(new_sock, FIONBIO, &ul);
#else
fcntl(new_sock,F_SETFL,O_NONBLOCK);
#endif

setsockopt(new_sock, SOL_SOCKET, SO_LINGER, (unsigned char *)&lg, sizeof(lg));
setsockopt(new_sock, SOL_SOCKET, SO_OOBINLINE, (unsigned char *)&opt, sizeof(int));

最佳答案

如果这是实际代码,您还没有初始化 ul 。做:

unsigned long ul = 1;
ioctlsocket(new_sock, FIONBIO, &ul);

关于c++ - Windows 上的非阻塞套接字在 send() 调用后不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738799/

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