如何检测NIO通道的连接错误

3

我有一个情况,需要连接多个服务器,我希望使用NIO技术来实现。

Selector会在有数据可读时通知我。是否有方法可以知道连接何时断开?也许当写入失败或通过捕获某些操作抛出的异常时可以知道? 我需要这种方法是非阻塞的,并且希望如果连接失败可以重新建立通道(即建立到同一服务器的新通道)。

1个回答

3

读写操作时会出现异常。

在其他情况下,如果通道在选择器上注册了读/写兴趣,并且通道被破坏,select()方法将返回,并且通道的选择键将指示可读/可写。在下一次读/写操作中,您将遇到异常。


谢谢!这似乎也适用于连接失败的情况,因此对于读/写也是有意义的。 - jbx
1
当通道断开时,select()将返回,并且通道的选择键将指示可读/可写。然而,当我从SocketChannel中读取时,电缆被拔出,select()不停地返回0,通道将永远不会再被选择。如果我从通道中忽略其可读/可写状态进行读写,则read()不会返回-1,它将继续返回0,而write()也不会抛出异常。目前我找不到检测套接字断开连接的方法,请问有什么线索吗? - neevek
1
@bot_bot,你想看一下这个问题和答案吗? - neevek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接