一尘不染

“软件导致连接中止:套接字写入错误”的官方原因

tomcat

给定此堆栈跟踪代码段

引起原因:java.net.SocketException:软件导致连接中止:
java.net.SocketOutputStream.socketWrite0(本地方法)处的套接字写入错误

我试图回答以下问题:

  1. 哪些代码引发此异常?(JVM?/ Tomcat?/我的代码?)
  2. 是什么导致引发此异常?

关于#1:

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

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

关于#2

我的猜测是,这是由于客户端在获得完整响应之前(例如,发送了一个请求,但是在获得完整响应之前,它已关闭/终止/脱机)终止了连接。

问题:

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

我需要证明该堆栈跟踪是套接字客户端的“故障”,并且服务器没有任何措施可以避免这种情况。(捕获异常或使用非Sun JVM
SocketOutputStream除外,尽管两者都不能真正避免客户端已终止的事实)


阅读 271

收藏
2020-06-16

共1个答案

一尘不染

当本地网络系统中止连接时,例如在数据重传失败后WinSock关闭已建立的连接(接收方从不确认在数据流套接字上发送的数据)时,会发生此错误。

请参阅此MSDN文章。另请参阅有关“软件导致连接中止”的一些信息

2020-06-16