如果是TCP套接口,调用conncet函数将激发TCP的三路握手过程,而且仅在连接建立成功或出错时才返回,其中出错返回可能有以下几种情况:
1、若TCP客户没有收到SYN分节的响应,则返回ETIMEDOUT错误。举例来说,调用connect函数时,4.4BSD内核发送一个SYN,若无响应则等待6秒钟后再发送一个,若无响应则等待24秒钟后再发送一个(TCPv2第828页),若总共等待了75秒钟后仍未收到响应则返回该错误。
2、若对客户的SYN的响应是RST(表示复位),则表明该服务器主机在我们指定的端口上并没有进程在等待与之连接;
3、若客户发出的SYN在中间的某个路由器上引发了一个"destination unreachable(目的地不可达)"ICMP错误,则人为是一种软错(soft error)。客户主机内核保存该消息,并按照第一种情况所描述的时间发送SYN。若在某个规定的时间内(4.4BSD规定75秒)后仍未收到响应,则把保存的消息(即ICMP错误)做为EHOSTUNREACH或者ENETUNREACH错误返回给进程。