Overlapped I/O 与阻塞和非阻塞套接字的概念有何关系?

How does Overlapped I/O relates to the concept of blocking and non-blocking sockets?

我想知道使用 Overlapped I/O 是否意味着我在非阻塞模式下使用套接字,或者阻塞和非阻塞套接字的概念与 Overlapped 的概念无关 I/O.

我会说他们彼此没有关系。套接字的阻塞与非阻塞是直截了当的。如果您在非阻塞模式下调用 send()recv() 并且套接字没有任何可用的东西([=10= 没有出站缓冲区 space,没有入站数据recv()),您会收到 WSAWOULDBLOCK 的错误响应。如果处于阻塞模式,该函数将不会 return 直到请求的操作完成或发生错误。

但是,I/O 重叠更像是一种委托模式。它将接受您的 WSASend()WSARecv() 请求并为您处理。但是,这不会像函数 return 那样快。相反,这些函数接收指向客户端指定的回调的指针。 send/recv 操作完成后,将通过您提供的回调方法通知您。

我会说 I/O 重叠是为了消除客户端程序员不断检查非阻塞套接字并调用 select() 轮询它们的需要。