大家可以先读下下面两篇,写的也比较清楚了。我再做总结扩展。
https://www.yisu.com/zixun/218302.html
http://lovestblog.cn/blog/2014/05/20/tcp-broken-pipe/
一、常见的TCP Socket异常码
ECONNRESET
收到对端的RST响应,程序会返回ECONNRESET错误码。比如对方是TCP主动关闭方(.close()),进入FIN_WAIT2之后,再向对端发数据会收到RST
EPIPE
向收到过RST的对端再次读写数据会立刻收到SIGPIPE信号并返回EPIPE。
SIGPIPE默认是会中止程序的,所以程序一般都捕获无视掉了,jvm也是。
两者定义处,c标准库
erro_list.c
615行可见 Connection reset by peer 字符串
360行可见 Broken pipe 字符串
说明这俩是系统层面的,所以不止在jdk,你可能在任何有用到socket通讯的组件比如redis、mq甚至ssh窗口看到这个异常