到目前为止,我发现的所有示例要么只能读取或写入,要么都是 10000 行的野兽,我什至不知道从哪里开始了解它们是如何工作的。
为了测试我的代码,我将浏览器指向我的服务器并发送了一个简单的 http 请求。结果令人困惑。
例如,在某一时刻,GetQueuedCompletionStatus 返回,WSARecv 表示它读取了我发送的 http 响应的字节数,尽管此响应应该(并且确实)最终到达客户端,并且 recvbuffer 甚至没有填充这些字节。
另外,我不明白一旦其他浏览器关闭连接,何时释放缓冲区,因为 GetQueuedCompletionStatus 在我调用 closesocket 后不断返回几次。
此外,我不知道 GetQueuedCompletionStatus 返回后何时有数据要读取或数据要写入。我可以尝试两者,看看哪个失败,但这似乎很粗鲁。
为了揭示我对 IOCP 可能存在的任何误解,我编写了一些伪代码来表达我认为我的代码的作用:
main {
create server socket
create io completion port
while true {
accept client socket
create completion port for client socket
create recv buffer and send buffer for client
call WSARecv once with 0 bytes for whatever reason
}
}
worker thread {
while true {
wait until GetQueuedCompletionStatus returns
do something if that failed, not …Run Code Online (Sandbox Code Playgroud)