我希望有人可以解释一种情况 - 任何情况 - 在使用send()之后,非阻塞的Windows套接字不会立即返回。在其他平台上,我的代码按预期工作,因此它似乎是特定于Windows的问题。
我可以告诉它不返回的方式非常简单:我{(1}}紧接send()函数之前和之后的消息,并且在运行时,控制台仅显示第一条消息。我似乎无法在一个简化的例子中重现它,所以我为缺乏代码道歉。如有必要,我会尝试提供更多细节。
编辑:
创建套接字并将其设置为非阻塞的特定代码如下。我假设非阻塞套接字确实没有办法以这种方式运行,并且其他东西导致它在显示第二条消息之前停止。无论如何,谢谢你的帮助......我会尽力去做到底,但是现在我很神秘。
cout
答案 0 :(得分:1)
如果你的“cout”消息显示不包含std :: endl,那么在你没有注意到的情况下,呼叫可能不会阻塞!
答案 1 :(得分:1)
发送将阻止填充已连接套接字上的ip堆栈缓冲区。如果你有一个连接的套接字,并且你开始更快地向它投掷数据,那么ip stack就可以通过附带的ack nak paddywack将它滚出电线,然后发送将阻止。
我还没有看到正确设置非阻塞发送会阻止。他们会因为阻塞而出错。所以我会看看你如何设置非阻塞io。您确定在结果套接字上设置非阻塞而不是基本套接字...即从accept返回的套接字。
答案 2 :(得分:1)
如果这是实际代码,则您尚未初始化 ul 。做:
unsigned long ul = 1;
ioctlsocket(new_sock, FIONBIO, &ul);