【问题标题】:Do Winsock blocking calls return after completing APC?完成 APC 后 Winsock 阻塞调用是否返回?
【发布时间】: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?

标签: c winsock2


【解决方案1】:

Winsock 和一般的套接字阻塞调用,如果缓冲数据在套接字上可用,将立即返回。如果没有立即可用的数据,阻塞函数显然会进入警报状态。

【讨论】:

  • 我的问题是当没有数据时会发生什么,并且警报状态被 APC 中断。这些调用是返回等待状态还是像其他等待函数一样返回。你的回复没有回答这个问题。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2012-04-17
  • 2012-07-07
  • 2016-01-02
相关资源
最近更新 更多