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) {}
}
}
ありがとう!