我正试图在套接字丛林中工作,遇到了I/O重叠的非阻塞套接字。我家里有三本书只提到了这个概念,但并没有真正地解释它,也没有给我任何例子。
所以我要找的是一篇文章,里面有一个例子来解释这个get,或者只是一个我可以自己解决的例子。如果这是windows的话就好了,但我想我应该也能把它从unix上转移过来。
我不介意一本书作为来源,但我很高兴能避免再花50美元。到目前为止,我只发现了非常基本的概念以及与其他套接字模型的基本比较。这并不是我不理解他们的概念,但我希望看到他们的行动,并可能得到一个很好的解释,他们是如何工作的。(我一点也不介意长篇文章:)
发布于 2012-09-18 20:08: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完成端口,但首先要熟悉前者。
https://stackoverflow.com/questions/12474521
复制相似问题