一、非堵塞connect版本
当在非堵塞TCP套接字上, 我们调用connect函数会立刻返回EINPROGRESS, 不过此时TCP三路握手正在进行, 我们可以通过检查套接字的状态。
*非堵塞connect有三个用途
1)、我们可以把三路握手叠加到其他的处理上面。 因为在连接过程中花费1个RTT时间,在局域网或者广域网上的时间幅度偏差很大(几毫秒甚至几秒), 那么我们可以利用这些时间让CPU处理其他事情。
2)、在web程序当中的多连接技术。
3)、通常情况非堵塞的connect连接的超时间是75秒, 但是通过非堵塞connect版本 ,我们可以自己设置等待时间。
*非堵塞connect细节处理
● 如果套接字是非堵塞的情况下, 如果我们连接到的服务器在同一个主机上面, 那么连接将会立刻完成。
● 在非堵塞套接字连接的时候, 我们需要用select来检查connect连接情况有以下两个规则:(1)当连接成功建立时, 描述符号将会变的可写。(2)当连接遇到错误的时候, 描述符变为即可读又可写。
二、非堵塞connect代码分析
源代码如下