1

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

4

1 回答 1

2

我会说它们彼此没有关系。套接字的阻塞与非阻塞是直截了当的。如果您正在调用send()recv()处于非阻塞模式并且套接字没有任何可用的东西(没有出站缓冲区空间send(),没有入站数据recv()),您会收到错误响应WSAWOULDBLOCK。如果处于阻塞模式,则函数将在请求的操作完成或发生错误之前简单地返回。

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

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

于 2015-02-23T15:25:27.193 回答