首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java NIO: IOException: Broken管道是什么意思?

Java NIO: IOException: Broken管道是什么意思?
EN

Stack Overflow用户
提问于 2009-07-25 05:03:59
回答 2查看 160.6K关注 0票数 95

对于我的一些Java NIO连接,当我有一个SocketChannel.write(ByteBuffer)调用时,它抛出一个IOException:"Broken“。

是什么导致了“管道破裂”,更重要的是,有可能从这种状态中恢复吗?如果无法恢复,这似乎是一个好兆头,表明发生了不可逆转的问题,我应该简单地关闭此套接字连接。这是一个合理的假设吗?在套接字连接仍然正常连接的情况下(而不是某个时刻出现故障的正常连接),是否会出现这种IOException

顺便说一句,在尝试SocketChannel.write()之前总是调用SocketChannel.isConnected()是否明智?如果是,我是否还可以假定连接“断开”,并且如果SocketChannel.isConnected()SocketChannel.isConnectionPending()都为false,则应该关闭该连接

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2009-07-25 05:12:39

管道断开仅仅意味着连接失败。假设这是不可恢复的,然后执行任何所需的清理操作(关闭连接等)是合理的。我不相信你会仅仅因为连接还没有完成而看到这一点。

如果您使用的是非阻塞模式,那么SocketChannel.connect方法将返回false,您将需要使用isConnectionPending和finishConnect方法来确保连接是完整的。我通常会根据预期编写代码,然后捕获异常来检测失败,而不是依赖于对"isConnected“的频繁调用。

票数 23
EN

Stack Overflow用户

发布于 2009-07-25 05:17:01

您应该假定插座在另一端是关闭的。用IOException的try catch块包装您的代码。

您可以使用isConnected()来确定SocketChannel是否已连接,但在write()调用完成之前,这一点可能会更改。尝试在catch块中调用它,看看这是否实际上就是您获取IOException的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1181255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档