WSAConnect()vs ConnectEx()

use*_*487 5 c++ sockets winapi winsock iocp

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

Dav*_*aim 5

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

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

你可能想看看Boost.AsioC++和libuvC代码,然后代码也是可移植的(并且不那么烦躁).另一个有趣的平台是微软Casablanca,它是跨平台的,但在我的经验中,性能是灾难性的.