了解IO完成端口

时间:2016-06-30 06:27:22

标签: sockets winapi io-completion-ports

我没有这个清楚,我在GetQueuedCompletionStatus将会按照创建顺序返回WSARecvWSASend的结果阅读,所以这是我的问题:
在服务器中如果使用CreateIoCompletionPort初始化NumberOfConcurrentThreads = 1,则打开与一个客户端的连接,服务器首先调用WSARecv然后调用WSASend,但客户端从不发送任何内容。在服务器中,GetQueuedCompletionStatus永远不会返回WSASend的结果,因为WSARecv的结果必须先发生?

1 个答案:

答案 0 :(得分:1)

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