【发布时间】:2017-06-25 10:37:36
【问题描述】:
MSDN 文档,即recv 函数states:
在发出诸如 recv 之类的阻塞 Winsock 调用时,Winsock 可能需要等待网络事件才能完成调用。 Winsock 在这种情况下会执行警报等待,该等待可能会被安排在同一线程上的异步过程调用 (APC) 中断。
执行警报等待的其他一些函数的文档,即GetOverlappedResultEx,声明它们在执行一个或多个 APC 后返回,错误代码为 WAIT_IO_COMPLETION。
但是,关于 recv 函数,这并没有明确说明。此外,此函数没有对应于在 APC 上被“唤醒”的错误代码。
因此标题中有一个问题:Winsock阻塞调用完成APC后是否返回?或者它们的行为不同于“其他”可警报等待,因为在 APC 之后它们返回等待状态?
【问题讨论】:
-
这对我来说是个新闻。我不知道 recv() 在接收到数据、连接关闭或发生某些错误之前会阻塞。有没有人真正看到过所描述的行为,即。在 recv() 等待时正在执行 APC?