Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何停止WSAPoll的阻塞调用_Sockets_Callblocking - Fatal编程技术网

Sockets 如何停止WSAPoll的阻塞调用

Sockets 如何停止WSAPoll的阻塞调用,sockets,callblocking,Sockets,Callblocking,我有个案子要处理。有一个线程调用WSAPoll()从TCP连接接收数据。代码如下所示: int result = WSAPoll(fdSocket, 1, timeout); if (result == 0) { // time out } else if (result == -1) { // socket error } 如果我将timeout设置为负数,线程将无限期地等待。但是,如果我从另一个线程调用函数StopWait(),我想让这个函数直接向这个线程返回一个值,比如0

我有个案子要处理。有一个线程调用WSAPoll()从TCP连接接收数据。代码如下所示:

int result = WSAPoll(fdSocket, 1, timeout);
if (result == 0)
{
    // time out
}
else if (result == -1)
{
    // socket error
}
如果我将timeout设置为负数,线程将无限期地等待。但是,如果我从另一个线程调用函数StopWait(),我想让这个函数直接向这个线程返回一个值,比如0

那么我该怎么做才能让这一切顺利进行呢?通过函数StopWait()向该阻塞线程添加一个异步过程调用,而不是另一个线程?如果是,添加什么可以使其返回我想要的值


谢谢

没有API可以在等待时中断WSAPoll()。它会一直阻塞,直到套接字满足等待或超时。因此,如果您希望能够中断它,请不要使用负超时,而是使用具有小超时的循环。否则,您必须使用一个额外的套接字,如UDP套接字,当您想要中断
WSAPoll()
(请参见)。顺便说一句,(另请参见)。向Microsoft报告为“Windows 8 Bugs 309411-WSAPoll不报告失败的连接”,Microsoft的回答是:“不会修复。现在的建议是,如果遇到此问题,不要使用WSAPoll函数,而是使用其他Net API函数。”对其他哪种Net API函数有什么建议?似乎没有人有解决办法。。。对话似乎总是以你提到的那句话结束。没有API可以在等待时中断
WSAPoll()
。它会一直阻塞,直到套接字满足等待或超时。因此,如果您希望能够中断它,请不要使用负超时,而是使用具有小超时的循环。否则,您必须使用一个额外的套接字,如UDP套接字,当您想要中断
WSAPoll()
(请参见)。顺便说一句,(另请参见)。向Microsoft报告为“Windows 8 Bugs 309411-WSAPoll不报告失败的连接”,Microsoft的回答是:“不会修复。现在的建议是,如果遇到此问题,不要使用WSAPoll函数,而是使用其他Net API函数。”对其他哪种Net API函数有什么建议?似乎没有人有解决办法。。。谈话似乎总是以你提到的那句话结束。