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