使用 IOCP 的无序套接字读取和关闭通知

Unordered socket read & close notification using IOCP

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

处理读取的数据包后,通常会对其进行重新排序以规避线程调度问题,无论 IOCP 是否确保 FIFO 队列,都会处理乱序的数据包。

问题出在套接字正常关闭或因错误关闭时。我在这两种情况下都看到了,又一次被o.s。线程调度程序,关闭通知可能会发送到应用程序(即使用框架的 http 服务器)"before" 先前读取数据的通知。

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

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

你的建议是有道理的,我想任何处理正常关闭(读取返回 0 字节)的代码都会在任何成功读取后处理它。来自 GetQueuedCompletionStatus() 的错误(例如连接重置错误等)更难集成到接收流中,因为就接收数据而言,它们发生在带外。您的问题有点含糊,很大程度上取决于您使用的代码以及您(或编写该代码的人)想要如何处理这些事情。恕我直言,没有唯一正确的方法。