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

时间:2012-09-18 09:52:04

标签: c++ sockets nonblocking overlapped-io

我正在尝试通过套接字丛林工作,并遇到了具有重叠I / O的非阻塞套接字。我家里有三本书,只提到这个概念,但没有真正解释它或给我任何例子。

所以我正在寻找的是一篇文章,其中以一个例子来解释这个问题,或者只是一个我可以自己完成的例子。如果这对于Windows来说会很好,但我想我也应该能够从unix传输它。

我不介意作为来源的书,但我很乐意避免另外50美元。到目前为止,我只找到了与其他套接字模型的基本概念和基本比较。这不是我不理解他们的概念,但我希望看到他们的行动,并可能得到一个很好的解释,他们是如何工作的。 (我根本不介意长篇文章:))

1 个答案:

答案 0 :(得分:2)

短语'非阻塞套接字'通常是指使用FIONBIO套接字选项,即使没有数据可供读取,也会立即返回read()。 (它返回EWOULDBLOCK错误。)

重叠I / O是Windows API特有的(例如,在UNIX上不可用)。 FIONBIO套接字选项使用,传统的Berkeley套接字API函数调用(read()等)也没有。

(对于Linux上的POSIX等效内容,请参阅'man aio'或输入man aio到您最喜爱的搜索引擎中。)

现在你已经明白'非阻塞套接字'和'重叠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完成端口那样扩展,但要先熟悉前者。