Java 阻塞SocketChannel连接会返回错误吗?
当我阅读SocketChannel的文档时,似乎很清楚阻塞的SocketChannel connect()调用只会返回true或抛出异常。换句话说,它只能在非阻塞模式下返回false。这是对的,还是我遗漏了什么/误读了什么 channel.configureBlocking(true)是否可能返回且通道不处于阻塞模式?我预计,如果configureBlocking(true)无法成功地将通道置于阻塞模式(在方法调用返回之前),将引发异常。对吗 最后,有没有办法让下面的代码无法连接,但返回TRUE?(代码只测试连接是否成功,它对通道没有任何作用,因此立即关闭): 谢谢Java 阻塞SocketChannel连接会返回错误吗?,java,nio,socketchannel,Java,Nio,Socketchannel,当我阅读SocketChannel的文档时,似乎很清楚阻塞的SocketChannel connect()调用只会返回true或抛出异常。换句话说,它只能在非阻塞模式下返回false。这是对的,还是我遗漏了什么/误读了什么 channel.configureBlocking(true)是否可能返回且通道不处于阻塞模式?我预计,如果configureBlocking(true)无法成功地将通道置于阻塞模式(在方法调用返回之前),将引发异常。对吗 最后,有没有办法让下面的代码无法连接,但返回TRUE
true
,要么抛出异常你在这个问题上的所有假设都是正确的。代码将连接或返回
FALSE
。你有什么问题吗?@kiruwka他不是这么说的,这是不对的。它要么连接并返回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) {}
}
}