【发布时间】:2011-01-08 18:08:24
【问题描述】:
鉴于此堆栈跟踪 sn-p
引起:java.net.SocketException: 软件导致连接中止: 套接字写入错误
java.net.SocketOutputStream.socketWrite0(本机 方法)
我尝试回答以下问题:
- 什么代码抛出了这个异常? (JVM?/Tomcat?/我的代码?)
- 是什么原因导致抛出此异常?
关于#1:
Sun 的 JVM 源代码不包含此确切消息,但我认为文本 Software cause connection abort: socket write error 来自 SocketOutputStream 的本机实现:
private native void socketWrite0(FileDescriptor fd, byte[] b, int off,
int len) throws IOException;
关于#2
我的猜测是,这是客户端在获得完整响应之前终止连接引起的(例如,发送了一个请求,但在获得完整响应之前,它已关闭/终止/离线)
问题:
- 上述假设是否正确(#1 和#2)?
- 这能否与以下情况区分开来:“由于 服务器 端的网络错误,无法写入客户端”?还是会呈现相同的错误消息?
- 最重要的是:是否有官方文件(例如来自 Sun)说明上述内容?
我需要证明这个堆栈跟踪是套接字客户端的“错误”,并且服务器无法采取任何措施来避免它。 (除了捕获异常,或者使用非 Sun JVM SocketOutputStream,虽然两者都不能真正避免客户端已经终止的事实)
【问题讨论】:
-
我在使用 Firefox 取消下载时遇到了这个问题
-
Hey Eran 我在向
OutputStream发送/写入 (outs.write(audioBytes);)byte[]时也遇到了这个异常。当音频播放和播放时,如果用户单击任何其他菜单(发送服务器请求),我在控制台上遇到了同样的错误。那么忽略这个异常是否安全? -
@Amogh - 看起来是这样,是的。基本上从答案的描述来看,这是一个 Windows 特定的错误,但我假设在 Linux 上你会得到同样的异常,只是用不同的措辞......(我的外行术语理解基本上是这是你发送时引起的通过一个套接字连接到某个远程位置 X 和 X 在中间断开连接,但我敢肯定这不是描述它的最准确方式)
-
对我来说,这发生在数据库服务器重新启动并且应用程序仍在尝试使用先前打开的连接进行查询时。不知道为什么这些没有刷新,因为我们使用的是基于 DBCP 的池。但是重新启动应用程序解决了这个问题。
标签: java exception sockets tomcat stack-trace