当我阅读 SocketChannel 的文档时,似乎很清楚阻塞 SocketChannel connect() 调用只会返回 true 或抛出异常。换句话说,它只能在非阻塞模式下返回 false。这是正确的,还是我错过/误读了什么?
channel.configureBlocking(true) 是否有可能返回并且通道不处于阻塞模式?我希望如果 configureBlocking(true) 无法成功地将通道置于阻塞模式(在方法调用返回之前),则会引发异常。那是对的吗?
最后,有没有什么方法可以让下面的代码连接失败却返回 TRUE?(代码只测试连接是否成功,它不对通道做任何事情,因此立即关闭):
SocketChannel channel = null;
try {
channel = SocketChannel.open();
channel.configureBlocking(true);
channel.connect(new InetSocketAddress(addr, port));
return Boolean.TRUE;
}
catch (Exception e) {
return Boolean.FALSE;
}
finally {
if (channel != null) {
try { channel.close() } catch (Exception e) {}
}
}
谢谢!