我已经使用IOCP创建了一个简单的虚拟服务器/虚拟客户端程序,用于测试/分析目的。(我还想指出,我是异步网络编程的新手)
看起来服务器和原始客户端工作得很好,但是当虚拟客户端尝试使用ConnectEx函数连接到服务器时,IOCP Worker线程仍然被GetQueuedCompletionStatus函数阻塞,并且在服务器成功接受连接时永远不会返回结果。
问题和/或原因是什么?我应该如何解决这个问题?
发布于 2010-07-20 18:07:40
即使在您将接受的套接字关联到IOCP之后,您的工作线程仍将在GetQueuedCompletionStatus上保持阻塞状态,直到您发布一个“解锁”完成事件。接收/写入操作的完成事件不会由系统发送,除非您“解锁”您的新套接字。有关详细信息,请查看Push Framework的源代码,它是一个使用http://www.pushframework.com的C++网络应用程序框架。“解锁”技巧存在于"IOCPQueue“类中。
发布于 2010-07-01 22:27:22
我认为你用你的评论回答了你自己的问题。
你的事件顺序是错误的,你说你绑定,ConnectEx,关联到IOCP。
您应该绑定,将套接字与IOCP关联,然后调用ConnectEx。
https://stackoverflow.com/questions/3123030
复制相似问题