首页 文章

Java:清除导致连接重置的原因的混乱

提问于
浏览
2

对于各种SO答案,似乎存在一些混淆以及相互矛盾的陈述:What's causing my java.net.SocketException: Connection reset? . 您可以在此处看到,已接受的答案表明连接已被另一方关闭 . 但事实并非如此,关闭连接不会导致连接重置 . 它被"an underlying TCP/IP error."审查

我想知道的是, SocketException: Connection reset 除了_2851074之外是什么意思_究竟是什么造成了这个?因为我怀疑它与关闭连接有什么关系(因为关闭连接是't an exception worthy flag, and reading from a closed connection is, but that isn' t "underlying TCP/IP error."

我的假设是这样的

连接重置是由于服务器无法确认ACK数据包(完全或根据TCP / IP不正确)引起的 . 并且只有当没有生成 dataread 时才会生成SocketTimeoutException(因为在一定时间后读取期间抛出此异常,并且读取正在等待数据,但不关心ACK数据包) . 换句话说,如果read()在指定的时间内没有读取任何实际数据字节(DATA LAYER),则会抛出SocketTimeoutException .

2 回答

  • 1

    从openjdk6源看,当尝试读取数据失败并出现ECONNRESET错误(Linux和Solaris)或WSAECONNRESET(Windows)时,会发出“连接重置” .

    根据我的经验,典型的原因是套接字另一端的一方在没有首先执行关闭的情况下关闭了套接字 .

  • 2

    根据我的经验,当客户端中止请求(用户关闭选项卡或单击另一个链接)时会发生这种情况 .

相关问题