сокет принимает в long в fin_wait_1 - PullRequest
       1

сокет принимает в long в fin_wait_1

0 голосов
/ 25 сентября 2018

Получая это странное поведение, не знаю, если SO_LINGER (0) - это «лучший способ» решить эту проблему.

Это происходит только тогда, когда у меня есть эти 2 фактора вместе:

  • ОС - windows
  • меньшая пропускная способность интернета

Когда эти два фактора объединяются, мои tcp-соединения (на стороне клиента), сразу после вызова close (), получаютзастрял в FIN_WAIT , а затем TIME_WAIT на долгое и долгое время

(В этой сети одно и то же приложение, работающее в других ОС, работает как положено. То же самое относится и кв Windows, но в лучшем сетевом соединении)

В этом конкретном случае я просто беспокоюсь о состояниях fin_wait _ (1 или 2).Моя первая мысль - установить для so_linger значение 0, но я не совсем убежден, что неудачное закрытие является правильным (или единственным) вариантом здесь.

Есть идеи о том, как мне справиться с этим?Есть ли другой способ заставить окна закрывать эти соединения (программно)?

(EDIT)

EventLoopGroup group = new NioEventLoopGroup(); try {
    Bootstrap b = new Bootstrap();
    b.group(group)
            .channel(NioSocketChannel.class)
            .option(ChannelOption.TCP_NODELAY, true)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000)
            // .option(ChannelOption.SO_LINGER, 0)   ( ?? )
            .handler(new ChannelInitializer<SocketChannel>() {
                @Override
                protected void initChannel(SocketChannel ch) throws Exception {
                    ChannelPipeline p = ch.pipeline();
                    p.addLast(new MyHandler());
                    p.addLast(new WriteTimeoutHandler(8, TimeUnit.SECONDS));
                    ch.config()
                            .setSendBufferSize(TCP_BUF_SIZE)
                            .setReceiveBufferSize(TCP_BUF_SIZE);
                }
            });

    ChannelFuture channelFuture = bootstrap.connect(host, port).sync();
    channelFuture.channel().closeFuture().sync();

} finally {
    group.shutdownGracefully(); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...