SIGPIPE

看到很多网络程序都有一段忽略SIGPIPE信号的处理,故总结一下。

第一次对其disconnected socket调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送). 但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不接收数据. 所以, 第二次调用write方法(假设在收到RST之后), 会生成SIGPIPE信号, 导致进程退出.

write调用时可以检查返回值,若是物理上的断开连接时,如网线断开,是不会收到RST的,也是不会返回成功的,若是逻辑上的socket断开,第一次write是会

返回成功的。

原文地址:https://www.cnblogs.com/encode/p/4518151.html