TCP连接的几种异常情况

  • TIME_WAIT作用:
    1、若是LAST_ACK丢失(丢失的周期1个TTL),需要重新发送FIN;
    2、防止同ip和port过早复用连接,导致收到上一个连接的数据。

  • EINTR
    accept、read等慢系统调用,在挂起的过程中,若是进程收到信号,则此挂起系统调用可能返回 EINTR

  • tcp建立连接中涉及2个队列:一个已经完成连接队列(ESTABLISHED),一个未完成连接队列(SYN_RCVD)

  • 服务端accept返回前中止,三次握手刚刚完成,服务端阻塞于accept,此时客户却发送了一个RST,此时accept会返回错误ECONNECTABORT或EPROTO

  • 服务进程中止,
    服务进程中止,内核会关闭其sock,则会向客户端发送一个FIN,并收到客户端的ACK。此时再向客户端sock发送数据,数据到达服务端时,内核发现其接收进程已经不存在,故返回客户进程一个RST。一般客户调用write后,立即调用read。若read在收到RST之前返回,则read返回值为EOF;若read在收到RST之后返回,则read返回错误ECONNREST

  • SIGPIPE,
    若向已经接收到RST的sock继续写入数据,则内核会向该进程发送一个SIGPIPE信号,该信号默认为中止进程。且写操作返回错误EPIPE

  • 服务器主机崩溃
    若是到达主机,所在局域网,则12min后read返回ETIMEOUT,若在中间路由器不可达,则read返回EHOSTUNREACH或ENETUNREACH

  • 服务器主机崩溃后重启
    客户端在服务器奔溃后重启后再发送数据时,会收到一个RST,则read返回ECONNREST

  • 服务器主机主动关机
    linux关机时,init首先会给所有进程发送 SIGTERM(可捕捉)信号,等待一段时间后,然后向仍在运行的进程发送SIGKILL(不可捕捉),则收到信号的进程都会关闭sock。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值