linux网络编程中常见异常处理

(1)服务器在accept前收到RST。
复现场景:服务器较忙时容易出现,处于listen态的服务器,接受客户端的connect,在服务器accept调用之前,客户端进行write操作,会触发这个RST;
解决办法:服务器再次调用accept;

(2)服务器进程终止。
复现场景:kill掉服务器进程,此时服务器会关闭所有套接字,即向客户端发送FIN,客户端则响应一个ACK。

(3)SIGPIPE信号。
复现场景:在(2)场景下,客户端持续向套接字write数据(服务器close了,客户端未 close),第一次会收到RST,继续write,会收到SIGPIPE信号(向一个收到RST的fd写数据触发)。SIGPIPE默认关闭进程,因此服务器程序常常会忽略此信号(不能使用默认);

(4)服务器主机崩溃。
复现场景:拔服务器网线。此时客户端会反复重传,直到很长时间后ETIMEOUT。

评论关闭。