具有重叠I/O的非阻塞套接字
Non blocking sockets with overlapped I/O
我试图在套接字丛林中工作,遇到了具有重叠I/O的非阻塞套接字。我家里有三本书只提到了这个概念,但没有真正解释它,也没有给我任何例子。
所以我想要的是一篇文章,用一个例子来解释这个问题,或者只是一个我可以自己解决的例子。如果这适用于windows,那就太好了,但我想我也应该能够从unix传输它。
我不介意一本书作为来源,但我很乐意避免另外50美元。到目前为止,我只找到了非常基本的概念和与其他套接字模型的基本比较。这并不是说我不理解他们的概念,但我希望看到他们的行动,也许能很好地解释他们是如何工作的。(我一点也不介意长篇文章:)
短语"非阻塞套接字"通常指的是使用FIONBIO套接字选项,即使没有可读取的数据,该选项也会立即返回对read()的调用。(返回时出现EWOULDBLOCK错误。)
重叠I/O是特定于Windows API的内容(例如,在UNIX上不可用)。FIONBIO套接字选项未使用,传统的Berkeley套接字API函数调用(read()等)也未使用。
(对于Linux上的POSIX等价物,请参阅"man-aio"或在您最喜欢的搜索引擎中键入man-aio。)
既然您已经了解了"非阻塞套接字"answers"重叠I/O"是两种不同的方法(而且不能混用),那么在每种方法上找到有用的文章应该会容易得多。
关于重叠I/O的MSDN文档实际上非常好。如果您正在进行Windows编程,那么您真的需要将重叠I/O用于性能和可扩展性很重要的任何事情。这里有一个很好的起点:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx
(这篇MSDN文章是关于管道的,但使用套接字是完全一样的。)
此外,请注意,WaitForMultipleObjects()的伸缩性不如使用I/O完成端口,但请先适应前者。
- 当套接字连接断开时检测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"安全吗
- 具有重叠I/O的非阻塞套接字
- 重叠I/O如何与阻塞和非阻塞套接字的概念相关
- 如何将重叠I/O与套接字一起使用