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
,它是跨平台的,但根据我的经验,性能是灾难性的。
我在我的客户端中使用 IOCP,但我发现在连接到服务器时使用阻塞调用更方便。那么在使用 IOCP 时使用阻塞 WSAConnect()
而不是非阻塞 ConnectEx()
有什么问题吗?
是的,非常好。
调用 WSAConnect
将阻塞线程,直到创建连接/发生错误。然后,您可以执行异步 IO 并使用您的应用程序 IOCP 获取有关已完成数据包的通知。 IOCP 不会给出任何关于 WSAConnect
.
另一点是IOCP 与Overlapped IO 一起工作。如果您的函数不消耗 OVERLAPPED
结构的任何内存位置(如 WSAConnect
),您可以确定 IOCP 不会处理该 API 调用。即使提供了 OVERLAPPED
,也不意味着该操作是异步的并且将在 IOCP 中发布。
您可能想看看 Boost.Asio
的 C++ 和 libuv
的 C。这样代码也将是可移植的(而且错误更少)。另一个有趣的平台是微软 Casablanca
,它是跨平台的,但根据我的经验,性能是灾难性的。