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

因此,我要寻找的是一篇文章,其中会举例说明,或者只是我自己可以解决的一个例子。如果这将用于Windows,那就太好了,但是我想我也应该能够从Unix传输它。

我不介意一本书作为来源,但我很乐意避免再购买50美元。到目前为止,我只发现了非常基本的概念以及与其他套接字模型的基本比较。不是我不了解他们的概念,而是希望看到他们的实际行动,并可能对他们的工作方式有一个很好的解释。 (我根本不在乎长篇文章:))

最佳答案

短语“非阻塞套接字”通常是指使用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完成端口,但请先适应前者。

关于c++ - 非阻塞式I/O socket ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12474521/

10-11 20:25