我使用 IOCP 制作了一个简单的虚拟服务器/虚拟客户端程序,用于某些测试/分析目的。(而且我还想指出,我是异步网络编程的新手)
看起来服务器与原始客户端工作得很好,但是当虚拟客户端尝试使用 ConnectEx 函数连接到服务器时,IOCP Worker 线程仍然被 GetQueuedCompletionStatus 函数阻塞,并且在服务器成功接受连接时从不返回结果。
问题和/或原因是什么,我应该如何解决这个问题?
我想你用你的评论回答你自己的问题。
您的事件顺序不正确,您说您绑定、连接、关联到 IOCP。
您应该绑定,将套接字与 IOCP 关联,然后调用 ConnectEx。
即使您将接受的套接字与 IOCP 相关联,您的工作线程仍将在 GetQueuedCompletionStatus 上保持阻塞,直到您发布“解锁”完成事件。除非您“解锁”新套接字,否则系统不会发送接收/写入操作的完成事件。详情请查看 Push Framework 的源代码http://www.pushframework.com它是一个使用 IOCP 的 C++ 网络应用框架。“解锁”技巧存在于“IOCPQueue”类中。