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》