重叠I/O如何与阻塞和非阻塞套接字的概念相关
How does Overlapped I/O relates to the concept of blocking and non-blocking sockets?
我想知道使用重叠I/O是否意味着我在非阻塞模式下使用套接字,或者阻塞和非阻塞套接字的概念与重叠I/O的概念无关。
我认为它们彼此没有关联。套接字的阻塞与非阻塞是直接的。如果您在非阻塞模式下调用send()
或recv()
,并且套接字没有任何可用内容(send()
没有出站缓冲区空间,recv()
没有入站数据),则会收到WSAWOULDBLOCK
的错误响应。如果处于阻塞模式,则在请求的操作完成或发生错误之前,该功能将不会返回。
但是,I/O重叠更像是一种委托模式。它将接受您的WSASend()
或WSARecv()
请求并为您处理。然而,这不会在函数返回后立即发生。相反,这些函数接收一个指向客户端指定的回调的指针。一旦send/recv操作完成,就会通过您提供的回调方法通知您。
我认为I/O重叠是为了消除客户端程序员不断检查非阻塞套接字并调用select()
轮询它们的需要。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 如何在C/C++中用FD_set Unix设置套接字文件描述符
- 套接字读取后,我在缓冲区中看到意外输入
- 如何在CPP中创建应该在Windows和Linux上运行的套接字?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- (Winsock) UDP 接收工作正常,但同一套接字的发送失败
- MSG_WAITALL的套接字发送得到了 22 EINVAL
- C++套接字客户端到 Python 服务器未创建连接
- 在不知道套接字的情况下关闭网络连接
- C++套接字对不读/写父/子
- 非更新套接字消息
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 当对套接字 send() 的同步调用由于连接另一端丢失而被阻止时,如何恢复?
- 重叠I/O如何与阻塞和非阻塞套接字的概念相关
- 内存泄漏-与套接字或字符串相关