nginx (1.1.19) конфигурация на уровне сокетов tcp_nodelay - PullRequest
0 голосов
/ 16 ноября 2018

Мне интересно https://github.com/nginx/nginx/blob/master/src/core/ngx_connection.c

В частности, строка 838 в ngx_configure_listening_sockets():

#if 0
          if (1) {
              int tcp_nodelay = 1;

              if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_NODELAY,
                         (const void *) &tcp_nodelay, sizeof(int))
                  == -1) //old-the current code calls an internal function to do this
              {
                  ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
                                "setsockopt(TCP_NODELAY) %V failed, ignored",
                                &ls[i].addr_text);
              }
          }
  #endif

Используя getsockopt, я действительно смог определить, что ни в одном из моих accept сокетов не было установлено TCP_NODELAY. Удаление блока препроцессора исправило это. Но почему это там? Если мы намерены позже и явно сконфигурировать принятый сокет, я не могу понять, где это происходит.

Это приложение создает полные ответы перед вызовом send, поэтому традиционным решением было бы отключить nagle (enable TCP_NODELAY), но * Я полагаю, что существует либо правильный способ включить TCP_NODELAY или у nginx есть очень веская причина не включать его. *

Правильно ли я, и если да, то что это?

(для протокола, этот вопрос в основном включает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...