【发布时间】:2010-06-26 07:12:47
【问题描述】:
我使用 IOCP 制作了一个简单的虚拟服务器/虚拟客户端程序,用于某些测试/分析目的。 (我还想指出,我是异步网络编程的新手)
看起来服务器与原始客户端运行良好,但是当虚拟客户端尝试使用 ConnectEx 函数连接到服务器时,IOCP Worker 线程仍然被 GetQueuedCompletionStatus 函数阻塞,并且在服务器成功接受连接时从不返回结果.
问题和/或原因是什么,我应该如何解决这个问题?
【问题讨论】:
-
请显示更多代码。无论如何,当您尝试远程登录您的服务器时它会做什么? (telnet localhost
,作为一个简单的tcp客户端非常有用)。 -
很抱歉我不能给你看实际代码,因为它是基于我们公司自己的库,但客户端的骨架可以描述如下: WSAstartup -> Create IOCP -> Initiate Worker Thread -> Get ConnectEx 与 IOCtl -> 绑定套接字 -> 调用 ConnectEx -> 将套接字分配给 IOCP。我得到“套接字已经连接”。当我尝试重复连接到服务器时出现 WSAGetLastError 错误。明天我会尝试远程登录我的服务器。谢谢!
-
似乎在新线程上调用 ConnectEx 仅用于连接目的时它可以正常工作,但我仍然不知道这个问题的确切原因是什么。