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 源不包含这个确切的消息,但我认为文本 Software caused connection abort: socket write error 来自 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/32068603/

相关文章:

java - Websphere 7 + EJB3 中的内存泄漏,大量 ClassMapping 实例

Glassfish (v3) 应用程序部署中的 java.util.zip.ZipException

java - Restful Spring boot 应用程序中的异常映射

c - 原始套接字/BPF - 过滤完成一次还是多次?

c# - 尝试使用 C# 访问 Windows 7 计算机上的端口 80 时出错

java - java中继承是编译时还是运行时

java - 如何在 View Bean中获取JSP请求和响应

android - 以字节为单位的包大小

delphi - 异常消息从哪里来?

c - 如何解决socket编程中的段错误?