对于我的一些Java NIO连接,当我有一个SocketChannel.write(ByteBuffer)
调用时,它抛出一个IOException
:"Broken“。
是什么导致了“管道破裂”,更重要的是,有可能从这种状态中恢复吗?如果无法恢复,这似乎是一个好兆头,表明发生了不可逆转的问题,我应该简单地关闭此套接字连接。这是一个合理的假设吗?在套接字连接仍然正常连接的情况下(而不是某个时刻出现故障的正常连接),是否会出现这种IOException
?
顺便说一句,在尝试SocketChannel.write()
之前总是调用SocketChannel.isConnected()
是否明智?如果是,我是否还可以假定连接“断开”,并且如果SocketChannel.isConnected()
和SocketChannel.isConnectionPending()
都为false
,则应该关闭该连接
谢谢!
发布于 2009-07-25 05:12:39
管道断开仅仅意味着连接失败。假设这是不可恢复的,然后执行任何所需的清理操作(关闭连接等)是合理的。我不相信你会仅仅因为连接还没有完成而看到这一点。
如果您使用的是非阻塞模式,那么SocketChannel.connect方法将返回false,您将需要使用isConnectionPending和finishConnect方法来确保连接是完整的。我通常会根据预期编写代码,然后捕获异常来检测失败,而不是依赖于对"isConnected“的频繁调用。
发布于 2009-07-25 05:17:01
您应该假定插座在另一端是关闭的。用IOException的try catch块包装您的代码。
您可以使用isConnected()来确定SocketChannel是否已连接,但在write()调用完成之前,这一点可能会更改。尝试在catch块中调用它,看看这是否实际上就是您获取IOException的原因。
https://stackoverflow.com/questions/1181255
复制相似问题