0

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

谢谢!

4

1 回答 1

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

  2. 'channel.configureBlocking(true) 是否有可能返回并且通道不处于阻塞模式?不,如果它不能执行操作,它会抛出一个异常。Javadoc 中也明确说明了这一点。

于 2013-11-10T23:35:30.227 回答