“软件导致连接中止:套接字写入错误”的官方原因
给定此堆栈跟踪代码段
由以下原因导致:java.net.SocketException: Software 导致连接中止:java.net.SocketOutputStream.socketWrite0(本机方法)处的套接字写入错误
我试图回答以下问题:
- 是什么代码引发此异常?(JVM?/Tomcat?/My code?)
- 是什么原因导致引发此异常?
关于#1:
Sun的JVM源没有包含这个确切的消息,但我认为文本软件导致连接中止:套接字写入错误来自以下的本机实现:SocketOutputStream
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
关于#2
我的猜测是,当客户端在获得完整响应之前终止连接时,这是由于它引起的(例如,发送请求,但在获得完整响应之前,它被关闭/终止/离线)
问题:
- 上述假设是否正确(#1和#2)?
- 这是否可以与“由于服务器端的网络错误而无法写入客户端”的情况区分开来?还是会呈现相同的错误消息?
- 最重要的是:是否有官方文件(例如来自Sun)说明上述内容?
我需要有一个证据来证明这个堆栈跟踪是套接字客户端的“错误”,并且服务器无法避免它。(除了捕获异常或使用非 Sun JVM SocketOutputStream,尽管两者都不能真正避免客户端已终止的事实)