Nety|TCP接続タイムアウト値のInteger.MAXVALUEを使用すると無制限に再接続されますか?


サスペンス


突然、Timeoutオプションは、次のネットワークの一般的なTCPクライアント接続コードで使用できます.MAX VALUEに設定すると、接続を無制限に再試行するかどうかを知りたい場合があります.Integer.MAXVALUE(2147483647)の値を使用すると、68年(2147483647/60(秒)/60(分)/24(時間)/365(日)の間に再接続が実行されるため、これは無限であると考えられます.
EventLoopGroup eventLoopGroup = new NioEventLoopGroup();

bootstrap.group(eventLoopGroup)
         .channel(NioSocketChannel.class)
         .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, Integer.MAX_VALUE)
         .handler(channelInitializer);

bootstrap.connect("192.168.10.111", 24).sync();
特定のデバイスがすべて開いているときに常に自動的に接続されるように、次のコードを作成し、定期的に接続を再試行します.内部を再接続すれば、それらのコードを削除できると思います.
public Future<Void> begin(ConnectionTag connectionTag) {
    cancelEvent = new CountDownLatch(1);
    future = executor.submit(() -> {
        boolean connected;
        do {
            if (cancelEvent.await(100, TimeUnit.MILLISECONDS)) {
                break;
            }
            connected = TcpClient.this.connectOnce(connectionTag);
        } while (!connected);
        cancelEvent.countDown();
        return null; 
    });
    return future;
} 

結果


結果は変な考えだった.再試行は3回のみ行われ、約21秒後に接続タイムアウトが発生し、実行制御に戻ります.(テストはWindowsオペレーティングシステムで行います.)