WSAConnect()vs ConnectEx()

时间:2016-03-22 08:18:50

标签: c++ sockets winapi winsock iocp

我在我的客户端使用IOCP,但我发现在连接服务器时使用阻塞调用更方便。那么在使用IOCP时使用阻止WSAConnect()而不是非阻塞ConnectEx()会有任何问题吗?

1 个答案:

答案 0 :(得分:5)

是的,完全没问题 对WSAConnect的调用将阻止该线程,直到创建连接/发生错误。然后,您可以执行异步IO并获取有关已使用应用程序IOCP的已完成数据包的通知。 IOCP不会提供有关WSAConnect的任何数据包。

另一点是IOCP使用Overlapped IO排除故障。如果您的函数不使用OVERLAPPED struct的任何内存位置(如WSAConnect),则可以确定IOCP不会处理该API调用。即使提供OVERLAPPED,也不意味着该操作是异步的,并且将在IOCP中发布。

你可能想看看Boost.Asio代表C ++和libuv代表C.然后代码也是可移植的(而且不那么迟钝)。另一个有趣的平台是microsoft Casablanca,它是跨平台的,但在我的经验中,性能是灾难性的。