在处理非阻塞套接字的连接的时候,我们往往会使用select来判断套接字在发起连接之后发生的变化,但是这个过程中linux和windows有
些差别,本文将详细分析这两个平台此时的差异性。
目标主机端口可达:
当套接字连接目标地址成功之后,select可以检测到这个套接字上的变化:“可写”。这种情况对于linux和windows都是一样的。
目标主机不可达:
这种情况下,套接字并没有发生变化,所以select会一直等待直到超时,这种情况对于linux和windows都是一致的。
目标端口不可达:
在windows平台上,套接字也没有发生变化,所以select会一直等待直到超时,但是通过getsockopt(SOL_SOCKET, SO_ERROR),
可以知道为什会超时的原因:10061(由于目标主机积极拒绝,无法连接);
在linux平台上,套接字有两种变化:“可读”和“可写”,通过getsockopt(SOL_SOCKET, SO_ERROR)可得到连接的结果:111(Connection refused)。