0

我不清楚,我在某个地方读到了GetQueuedCompletionStatus将返回WSARecvWSASend按照它们创建的顺序产生的结果,所以这是我的问题:
在服务器中如果初始化CreateIoCompletionPortNumberOfConcurrentThreads = 1然后打开与一个客户端的连接,然后服务器首先调用WSARecvWSASend但是客户从不发送任何东西。在服务器中,GetQueuedCompletionStatus永远不会返回结果,WSASend因为结果WSARecv必须首先发生?

4

1 回答 1

1

当 IO 操作完成(成功或最初返回挂起)时,对具有绑定 IOCP 的文件 - 数据包排队到 IOCP - 并且 GetQueuedCompletionStatus 得到了这个数据包。因此,如果您开始 2 个 io 操作 - WSARecv 和 WSASend 和 WSASend 首先竞争 - GetQueuedCompletionStatus 首先返回 WSASend 状态,即使 WSARecv 未完成。所以 GetQueuedCompletionStatus 只是在使用此 IOCP 归档的一些 io 操作完成之后

于 2016-06-30T10:37:33.683 回答