Given this stack trace snippet
Caused by: java.net.SocketException: Software caused connection abort: socket write error
在java.net.socketoutputstream.socketwrite0(本机方法)上
I tried to answer the following questions:
- 什么代码正在抛出此例外?(JVM?/tomcat?/我的代码?)
- 是什么原因导致这种例外?
Regarding #1:
Sun的JVM源不包含此确切的消息,但我认为文本软件导致连接中止:套接字写入错误 来自本地实施SocketOutputStream
:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
Regarding #2
我的猜测是,这是在客户终止连接之前引起的,然后在获得完整响应之前(例如发送了一个请求,但是在获得完整响应之前,它已关闭 /终止 /离线)
Questions:
- 以上假设正确(#1和#2)吗?
- 这可以与情况分散:“由于网络错误,无法写信给客户服务器侧面”?还是会呈现相同的错误消息?
- 最重要的是:Is there an official document (e.g from Sun) stating the above?
我需要有证据表明此堆栈跟踪是插座客户端的"故障",服务器无法做到避免它。(除了捕获异常或使用非Sun JVM socketTupstream,尽管两者都并不能真正避免客户终止的事实)
答案
当本地网络系统中止连接时,例如当数据重新传输失败后,Winsock关闭已建立的连接时,可能会发生此错误(接收者永远不会确认在数据式套件上发送的数据)。
看这篇MSDN文章。也可以看看有关"软件导致连接中止"的一些信息。