【问题标题】:How to detect a connection error on an NIO Channel如何检测 NIO 通道上的连接错误
【发布时间】:2012-01-13 13:35:40
【问题描述】:

我有多个连接到多个服务器的情况,我希望为此使用 NIO。

当有数据要读取时,选择器会告诉我。有什么方法可以知道连接何时不再连接?也许当写入失败或捕获某个操作引发的异常时? 我需要它是非阻塞的,并且我希望在连接失败时可以重新建立通道(即建立到同一服务器的新通道)。

【问题讨论】:

    标签: java nio


    【解决方案1】:

    您将获得读/写异常。

    其他时候,如果通道在选择器上注册为读/写兴趣,当通道中断时,select() 将返回,通道的选择键将指示可读/可写。下次读/写会遇到异常。

    【讨论】:

    • 谢谢!这似乎也是它适用于连接失败的方式,因此对于读/写也有意义。
    • 当通道坏了,select()会返回,通道的选择键会指示可读/可写,这不是真的,而我正在阅读SocketChannel,电缆被拔下,select() 不断返回 0 并且永远不会再次选择该通道。如果我在忽略其可读/可写状态的情况下读取或写入通道,read() 不会返回 -1,它会继续返回 0,而write() 不会抛出异常。目前我找不到检测套接字断开的方法,有人给我一个线索吗?
    • @bot_bot,你想看看this question 和答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多