TCP echo 中断崩溃情况分析及讨论

本文详细探讨了在UNIX网络编程中TCP服务器进程终止、主机崩溃、重启、主机关闭以及连接在accept前中断等情况下的客户端行为。分析了服务器发送FIN、RST以及不发送任何数据时,客户端如何响应并处理错误,如ECONNRESET、ETIMEOUT和EHOSTUNREACH等。
摘要由CSDN通过智能技术生成

 

1. termination of server process

当服务器和客户端正常连接的时候,通过kill命令将连接好的服务器子进程结束掉,此时服务器子进程会关闭所有描述符,然后向客户端发送一个FIN ,此时客户端的TCP会回复一个ACK,导致TCP连接前半部分终止。

  • 在这个时间点上,客户端不会发生任何事件,因为现在客户端进程正在阻塞在fgets-即等待用户的输入

 

此时如果输入一行数据并发送,服务器接收到数据后会回复一个RST,因为此时套接字已经关闭。

  • 这种情况也会取决于时间,客户端readline时,若先收到第二步中的FIN,则立即返回0,显示“服务器意外终止”,如果先接收到RST,则返回一个ECONNRESET

2.crashing of server host :

当服务器和客户端正常连接的时候,服务器主机崩溃,此时服务器不会发送任何数据给客户端,包括FIN等都不会发送

  • 在这个时间点上,客户端不会发生任何事件,因为现在客户端进程正在阻塞在fgets-即等待用户的输入

 

此时如果再输入一行数据并发送,因为此时服务器已经崩溃,不会发送任何数据

  • 客户端会阻塞在对readline的调用上,即服务端发送数据后不显示会送内容,此时客户端会不断重传数据,以期得到服务端的ACK的响应,一般会尝试重传12次大约9分钟&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值