tcp_nodelay的nginx(1.1.19)套接字级别配置

时间:2018-11-16 20:30:12

标签: c sockets nginx tcp

我很好奇 https://github.com/nginx/nginx/blob/master/src/core/ngx_connection.c

具体来说,ngx_configure_listening_sockets()中的第838行:

#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(启用TCP_NODELAY),但是 *我认为这是正确的一种启用TCP_NODELAY或nginx有一个很好的理由不启用它。*

我正确了吗?如果是,那是什么?

(为了记录,这个问题主要涉及

0 个答案:

没有答案