我在我的客户端使用IOCP,但我发现在连接服务器时使用阻塞调用更方便。那么在使用IOCP时使用阻止WSAConnect()
而不是非阻塞ConnectEx()
会有任何问题吗?
答案 0 :(得分:5)
是的,完全没问题
对WSAConnect
的调用将阻止该线程,直到创建连接/发生错误。然后,您可以执行异步IO并获取有关已使用应用程序IOCP的已完成数据包的通知。 IOCP不会提供有关WSAConnect
的任何数据包。
另一点是IOCP使用Overlapped IO排除故障。如果您的函数不使用OVERLAPPED
struct的任何内存位置(如WSAConnect
),则可以确定IOCP不会处理该API调用。即使提供OVERLAPPED
,也不意味着该操作是异步的,并且将在IOCP中发布。
你可能想看看Boost.Asio
代表C ++和libuv
代表C.然后代码也是可移植的(而且不那么迟钝)。另一个有趣的平台是microsoft Casablanca
,它是跨平台的,但在我的经验中,性能是灾难性的。