【发布时间】:2012-01-13 13:35:40
【问题描述】:
我有多个连接到多个服务器的情况,我希望为此使用 NIO。
当有数据要读取时,选择器会告诉我。有什么方法可以知道连接何时不再连接?也许当写入失败或捕获某个操作引发的异常时? 我需要它是非阻塞的,并且我希望在连接失败时可以重新建立通道(即建立到同一服务器的新通道)。
【问题讨论】:
我有多个连接到多个服务器的情况,我希望为此使用 NIO。
当有数据要读取时,选择器会告诉我。有什么方法可以知道连接何时不再连接?也许当写入失败或捕获某个操作引发的异常时? 我需要它是非阻塞的,并且我希望在连接失败时可以重新建立通道(即建立到同一服务器的新通道)。
【问题讨论】:
您将获得读/写异常。
其他时候,如果通道在选择器上注册为读/写兴趣,当通道中断时,select() 将返回,通道的选择键将指示可读/可写。下次读/写会遇到异常。
【讨论】:
select() 不断返回 0 并且永远不会再次选择该通道。如果我在忽略其可读/可写状态的情况下读取或写入通道,read() 不会返回 -1,它会继续返回 0,而write() 不会抛出异常。目前我找不到检测套接字断开的方法,有人给我一个线索吗?