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分钟&