Stephen C的答案here很好地描述了这个问题。他说断管异常是由导致连接关闭的东西造成的,而不是应用程序。我想知道所有这些“东西”一般是什么,这导致连接关闭?处理它们的可能方法是什么?
我的使用环境: 我正在Azure上的一组计算机上运行我的应用程序,并且所有这些都正在与其中一台计算机通信。我几乎总是得到这个错误。
TCP超时可能是其中一个原因吗?如果是,那么如何使套接字通道(影响Socket在它们后面运行)从不关闭TCP超时的会费?
答案 0 :(得分:2)
当客户端远离正在侦听的套接字时,会出现断管异常。这可能是由于服务器响应缓慢导致客户端达到套接字超时。比方说,如果是浏览器,任何http请求需要很长时间才能响应并且用户关闭浏览器,应用程序日志中将显示损坏的管道异常。
现在要解决此问题,要么增加套接字超时,要么修复服务器响应。
答案 1 :(得分:2)
您可以获取与SocketChannel关联的套接字,然后设置其keepAlive属性。这样的事情。
SocketChannel sockChannel;
/*
connect here
*/
sockChannel.socket().setKeepAlive(true);