我很好奇
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协议
),但是
*我想要么是
对的
使能方式
TCP协议
或者nginx有很好的理由不启用它。*
我说得对吗?如果是,是哪一个?
(据记录,这个问题主要涉及