我想知道使用重叠I / O意味着我在非阻塞模式下使用套接字,或者阻塞和非阻塞套接字的概念是否与重叠I / O的概念无关。 / p>
答案 0 :(得分:2)
我会说他们彼此无关。套接字的阻塞与非阻塞是直截了当的。如果您在非阻塞模式下调用send()
或recv()
且套接字没有任何可用内容(send()
没有出站缓冲区空间,则recv()
没有入站数据}),您收到WSAWOULDBLOCK
的错误回复。如果处于阻塞模式,则在请求的操作完成或发生错误之前,该函数将不会返回。
但是,I / O重叠更多是委托模式。它会接受您的WSASend()
或WSARecv()
请求并为您处理。但是,这不会在函数返回后立即生效。而是这些函数接收指向客户端指定的回调的指针。完成发送/接收操作后,将通过您提供的回调方法通知您。
我想说I / O重叠是为了消除客户端程序员不断检查非阻塞套接字并调用select()
来轮询它们的需要。