TCP连接终止情况

accept返回前终止连接

场景描述:三次握手完成后,连接建立完成,然后Client TCP发送一个RST(reset)。在服务器方,连接被它的TCP放入等待连接队列,当RST到来时,连接正在等待服务器进程调用accept。一段时间后,服务器进程调用accept。

发生这种情况后,POSIX规定accept函数返回ECONNABORTED


服务器进程终止

场景描述:杀死服务器子进程后,子进程上的描述符被关闭,因此会向客户端发送一个FIN。这时候客户端不知道服务器的进程已经关闭,接受到FIN的客户端回复ACK,然后还会继续传送未传完的数据 (但是这个时候调用read将会返回0,表示EOF)。服务器收到客户数据时,由于连接不存在,会返回RST。这时客户端已经关闭,收不到RST。

SIGPIPE信号

当服务器close一个连接时,若client端接着发数据。根据TCP协议的规定,会收到一个RST响应,client再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不要再写了。

该信号的默认行为是终止进程

无论该进程是捕获了该信号并从信号函数返回,还是简单地忽略该信号,写操作write函数都将返回EPIPE错误

 

服务器主机奔溃

场景描述:在三次握手后的服务器和客户端之间,如果主机奔溃,接收不到客户端的报文,那么客户端就会持续重传数据分节,试图从服务器接收一个ACK。由于主机已经奔溃,所以对客户不会有回应,那么可能出现两种情况:

1. 中间某个路由器判定服务器主机不可达,返回EHOSTUNREACH 或者 ENETUNREACH

2. 客户一直没收到回应,返回ETIMEOUT

服务器主机奔溃后重启

场景描述:在三次握手后的服务器和客户端之间,如果主机奔溃并重启,那么这时候主机已经丢失了奔溃前的所有连接信息。接收到客户端的数据分节时,会响应一个RST。这时候客户阻塞的read函数会返回ECONNRESET

服务器主机关机

UNIX系统关机时,init进程先给所有进程发送SIGTERM信号,等待一段时间,然后给所有仍在运行的进程发送SIGTERM信号并终止。服务器子进程关闭后,接下来的情况同上面的 服务器进程终止

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值