3 回答

TA贡献1966条经验 获得超4个赞
这是由:
最常见的是,当另一端已经关闭时写入连接;
通常情况下,对等体关闭连接而不读取其末尾已经挂起的所有数据。
因此,在这两种情况下,您的应用程序协议定义都很糟糕。
还有第三个原因,我不会在这里记录,但涉及对等方采取故意行动重置而不是正确关闭连接。

TA贡献1856条经验 获得超11个赞
SocketException:管道损坏,是由代码读取或写入连接时关闭连接的“另一端”(客户端或服务器)引起的。
这是客户端/服务器应用程序中非常常见的例外,它从应用程序控件之外的客户端或服务器接收流量。例如,客户端是浏览器。如果浏览器进行Ajax调用,和/或用户只是关闭页面或浏览器,那么这可以有效地杀死所有通信。基本上,只要另一端终止其应用程序,您就会看到此错误,并且您没有预料到它。
如果您在应用程序中遇到此异常,那么这意味着您应检查发生IO(输入/输出)的代码,并使用try / catch块将其包装以捕获此IOException。然后,由您决定如何处理这种半有效的情况。
在你的情况下,你仍然可以控制的最早的地方就是调用HttpMethodDirector.executeWithRetry
- 所以确保调用是用try / catch块包装的,并按照你认为合适的方式处理它。
我强烈建议不要在调试/跟踪级别以外的任何地方记录SocketException-Broken Pipe特定错误。否则,这可以通过填充日志作为DOS(拒绝服务)攻击的一种形式。针对这种常见情况,尝试并强化并对您的应用程序进行负面测试。
添加回答
举报