【发布时间】:2014-06-26 15:16:37
【问题描述】:
我正在 Windows 中使用 WinSock 2.0 开发代理服务器。如果我想在阻塞模型中开发它, select() 是等待客户端或远程服务器接收数据的方式。是否有任何适用的方法可以使用 I/O 完成端口来做到这一点?
我曾经使用 I/O 完成端口为两个数据方向提供两个上下文。但是挂起的 WSARecv 无法从远程服务器接收任何数据!没找到问题。
提前致谢。
编辑。 Here 是当前开发的 I/O 完成端口上的 WorkerThread 代码。但我问的是如何实现 select() 等价。
【问题讨论】:
-
请出示您的代码
-
你没有运气,完成端口等待完成,而不是准备就绪。使用完成端口获得类似
select的语义的唯一方法是在单独的线程中实际使用select(或WaitFor...)并将自定义完成事件发布到端口。当然,这完全是愚蠢的,并且首先破坏了使用完成端口的目的。 -
@Damon 感谢您的回答 :) 我使用了零字节接收并且它有效 :)
标签: c sockets winapi winsock winsock2