WSAConnect() 与 ConnectEx()

WSAConnect() vs ConnectEx()

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

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

的数据包

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

您可能想看看 Boost.Asio 的 C++ 和 libuv 的 C。这样代码也将是可移植的(而且错误更少)。另一个有趣的平台是微软 Casablanca,它是跨平台的,但根据我的经验,性能是灾难性的。