【发布时间】:2013-11-19 06:45:07
【问题描述】:
当我阅读 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) {}
}
}
谢谢!
【问题讨论】:
-
您在问题中的所有假设都是正确的。该代码将连接或返回
FALSE。不过,你的问题是什么? -
@kiruwka 他不是这么说的,也不正确。它将要么连接并返回 TRUE,要么抛出异常。他的问题说得很清楚。
标签: java nio socketchannel