java - "Software caused connection abort: socket write error"的官方原因

标签 java exception sockets tomcat stack-trace

鉴于此堆栈跟踪片段

Caused by: java.net.SocketException: Software caused connection abort: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)

我尝试回答以下问题:

  1. 什么代码抛出此异常? (JVM?/Tomcat?/我的代码?)
  2. 什么原因导致抛出此异常?

关于#1:

Sun 的 JVM 源代码不包含此确切消息,但我认为文本软件导致连接中止:套接字写入错误来自 SocketOutputStream 的 native 实现:

private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
                 int len) throws IOException;

关于#2

我的猜测是,这是当客户端在获得完整响应之前终止连接时引起的(例如发送了请求,但在获得完整响应之前,它被关闭/终止/离线)

问题:

  1. 上述假设是否正确(#1 和 #2)?
  2. 这是否可以与“由于服务器端出现网络错误,无法写入客户端”的情况区分开来?或者会呈现相同的错误消息?
  3. 最重要的是:是否有官方文件(例如来自 Sun)说明上述内容?

我需要证明这个堆栈跟踪是套接字客户端的“错误”,并且服务器无法采取任何措施来避免它。 (除了捕获异常或使用非 Sun JVM SocketOutputStream,尽管两者都不能真正避免客户端已终止的事实)

最佳答案

This error can occur when the local network system aborts a connection, such as when WinSock closes an established connection after data retransmission fails (receiver never acknowledges data sent on a datastream socket).

参见this MSDN article 。另请参阅Some information about 'Software caused connection abort' .

关于java - "Software caused connection abort: socket write error"的官方原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19611981/

相关文章:

java - 当我从 test.java 文件运行时,JUnit 测试不会运行

java - 如何处理 Java FX2 中未捕获的运行时异常?

c# - 套接字只接收部分消息 C#

C# 线程在套接字上接收数据之前退出

java - 使用相同端口的 tcp 中继服务器

java - 如何使用 Testcontainers 将可执行文件复制到 Docker 容器

java - Tomcat 7 ssl 客户端身份验证

java - 我如何拒绝访问父类(super class)的方法

javascript - 单独处理同一实例的多个异常

python - optparse 处理 ArugmentException