四、TCP C/S:连接建立后,服务器主机崩溃

1. 程序源码

http://my.oschina.net/lowkey2046/blog/693852

2. 测试方法

需要使用两台主机进行测试

a. 在树莓派上(192.168.1.24)上启动服务器进程

$ ./tcpserv01 &
[1] 1782

b. 在 PC 机上启动客户端进程,输入 hello world

测试客户端能接收到服务器数据

$ ./tcpcli01 192.168.1.24
hello world
hello world

c. 直接将树莓派电源拔掉

在客户端上继续输入 'hello',数据将由 write 写入内核,再由客户 TCP 作为一个数据分节送出。之后,会一直客户端阻塞于 read,等待服务器响应。

客户端 TCP 持续重传数据分节,试图从服务器上接收一个 ACK。

hello 
str_cli: server terminated prematurely

最后 read 超时返回。通过 perror 查看出错原因为:Connection timed out。

3. wireshark 截图

输入图片说明

可以看出,客户端一直尝试 TCP 重传,尝试了16次才放弃,总共花费了十多分钟。

4. 客户端尝试连接奔溃的主机

客户端执行

$ ./tcpcli01 192.168.1.24
connect: Connection timed out

wireshark 截图

输入图片说明

客户端重试6次收终止,总共花费一分多钟。

参考资料

《UNP》

转载于:https://my.oschina.net/lowkey2046/blog/694229

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值