短语“非阻塞套接字”通常是指使用 FIONBIO 套接字选项,即使没有准备好读取的数据,它也会立即返回对 read() 的调用。(它返回一个 EWOULDBLOCK 错误。)
重叠 I/O 是 Windows API 特有的(例如,在 UNIX 上不可用)。不使用FIONBIO 套接字选项,也不使用传统的 Berkeley 套接字 API 函数调用(read() 等)。
(对于 Linux 上的 POSIX 等价物,请参阅“man aio”或在您最喜欢的搜索引擎中输入 man aio。)
既然您了解了“非阻塞套接字”和“重叠 I/O”是两种不同的方法(不能混为一谈),找到关于每种方法的有用文章应该会容易得多。
MSDN 关于重叠 I/O 的文档实际上非常好。如果您正在执行 Windows 编程,那么您确实需要在性能和可伸缩性重要的任何事情上使用重叠 I/O。这是一个很好的起点:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx
(这篇 MSDN 文章是关于管道的,但使用套接字时完全相同。)
另外,请注意 WaitForMultipleObjects() 的扩展性不如使用 I/O 完成端口,但首先要适应前者。