我在套接字引擎中遇到了一个奇怪的行为。然后引擎使用带有OVERLAPPED结构的IO完成端口。
我使用WSASend
(每次调用一个缓冲区)发送几个数据包,但有时我成功调用GetQueuedCompletionStatus
,其中传输的字节为零!如果我拨打WSAGetOverlappedResult
(无等待),则会返回WSA_IO_INCOMPLETE
。
一段时间后,我收到一个具有相同重叠结构的新完成数据包,这次传输的字节与缓冲区长度匹配,WSAGetOverlappedResult
不返回任何错误。
为什么操作系统在数据包仍在队列中时会生成完成通知?