小编Joh*_*Doe的帖子

IOCP 接收和发送

到目前为止,我发现的所有示例要么只能读取或写入,要么都是 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)

sockets windows winapi iocp asyncsocket

2
推荐指数
1
解决办法
2672
查看次数

标签 统计

asyncsocket ×1

iocp ×1

sockets ×1

winapi ×1

windows ×1