具有重叠I/O的非阻塞套接字

Non blocking sockets with overlapped I/O

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

我试图在套接字丛林中工作,遇到了具有重叠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完成端口,但请先适应前者。