无序插座读取&使用IOCP关闭通知

时间:2015-01-23 00:04:38

标签: iocp

大多数使用套接字和I / O完成端口的服务器框架/示例以一种我无法完全弄清楚目的的方式发出通知。

读取数据包后,通常会对它们进行重新排序,以避免在IOCP确保FIFO队列时无序处理数据包的线程调度问题。

问题是套接字正常关闭或出错。我在两种情况下都看到了,并且在o.s.在线程调度程序中,关闭通知可以在“之前”引用的数据通知之前发送到应用程序(即使用框架的http服务器)。

我认为关闭通知应该以这种方式排队,以便应用程序在之前的读取后收到它。

在我看到的大多数代码中是否有任何预期用途,或者我的行为可能是正确的,具体取决于具体情况?

1 个答案:

答案 0 :(得分:1)

你的建议是有道理的,我会想象任何处理优雅关闭的代码(读取返回0字节)都会通过在任何正在进行的成功读取之后处理它来实现。来自GetQueuedCompletionStatus()的错误(例如连接重置错误等)更难集成到接收流中,因为就接收数据而言,它们在带外发生。您的问题有点模糊,并且非常依赖于您正在使用的代码以及您(或编写该代码的人)如何处理这些问题。没有一种正确的方法,恕我直言。