可以阻塞SocketChannel连接返回false吗?

时间:2013-11-07 14:54:45

标签: java nio socketchannel

当我阅读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) {}
    }
}

谢谢!

1 个答案:

答案 0 :(得分:0)

Javadoc明确指出“如果此通道处于阻塞模式,则此方法的调用将阻塞,直到建立连接或发生I / O错误”。所以它返回true或抛出异常。