【问题标题】:No exception when writing response to closed connection写响应关闭连接时也不例外
【发布时间】:2013-10-30 15:29:57
【问题描述】:

我在 JBoss 5.1 上有简单的 servlet。 写入响应时,如果连接关闭,则没有异常。 连接因读取超时而关闭,来自外部。

JBoss 收到 FIN、ACK、ACK 应答,几秒钟后发送我的响应(PSH、ACK)并收到 RST。

如何在 servlet 中确定连接已关闭和/或响应未成功写入?

【问题讨论】:

  • 写入大数据 (500-600 Kb) 以响应我收到 java.net.SocketException: Broken pipe
  • 找到解决方案。我将 JBoss 连接器的 socketBuffer 设置为 -1,默认为 9000 字节。这将如何影响 Jboss 的性能?
  • 关闭缓冲区仅对本地连接有帮助。因为没有将缓冲区响应拆分为 2 部分 - header 和 body,并且 JBoss 在发送 header 后接收 RST,所以我们在发送 body 时出现异常。在网络上,JBoss 发送 3 个数据包(header、body、FIN)并接收三个 RST。

标签: java servlets tcp jboss


【解决方案1】:

如果你写了足够多的数据,以至于在 RST 到达后你还在写,你会得到一个 IOException: 'connection reset by peer'。 TCP 缓冲和异步写入意味着小写入可能不会发生这种情况。

【讨论】:

  • 我在 RST 之前和客户端的 FIN 之后写。问题是JBoss在收到FIN时没有完全断开连接,并允许无异常地写入响应。
猜你喜欢
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2018-04-29
  • 2013-05-31
相关资源
最近更新 更多