java.net.SocketException: Software caused connection abort

原因分析可以看TCP关闭状态详解
https://www.cnblogs.com/borey/p/5626124.html

上图是tcp连接被动关闭方的状态转换图
(1)收到对端FIN后,关闭读通道进入CLOSE_WAIT状态
(2)在CLOSE_WAIT状态等待应用层调用close函数关闭连接
(3)如果在超时时间内调用了close,则进入LAST_ACK状态;否则直接进入CLOSED状态
(4)在LAST_ACK状态,发送FIN到对端并等待对端的确认ACK
(5)如果在超时时间内收到了确认ACK则进入CLOSED状态,否则直接进入CLOSED状态


下面是我的测试结果,和文章讲解相符
1:java.net.SocketException: Software caused connection abort: recv failed
对端调了close,本地还在对应的socket上读
注意:这个异常马上就会抛出,因为读通道已经关闭

2.java.net.SocketException: Software caused connection abort: socket write error
对端调了close,本地还在对应的socket上写
注意:这个异常不会马上抛出,也就是不会马上感知到,要隔一段时间再写数据才会抛出,
如果本地一直在写数据,则前面的不会抛异常,后面的才会抛异常。

猜你喜欢

转载自f543711700.iteye.com/blog/2412485