重叠I/O如何与阻塞和非阻塞套接字的概念相关

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

本文关键字:套接字 概念相关 重叠      更新时间:2023-10-16

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

我认为它们彼此没有关联。套接字的阻塞与非阻塞是直接的。如果您在非阻塞模式下调用send()recv(),并且套接字没有任何可用内容(send()没有出站缓冲区空间,recv()没有入站数据),则会收到WSAWOULDBLOCK的错误响应。如果处于阻塞模式,则在请求的操作完成或发生错误之前,该功能将不会返回。

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

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