Added support for TCP_FASTOPEN supported in Linux >= 3.7.1.
--- auto/unix | 12 ++++++++++++ src/core/ngx_connection.c | 32 ++++++++++++++++++++++++++++++++ src/core/ngx_connection.h | 4 ++++ src/http/ngx_http.c | 4 ++++ src/http/ngx_http_core_module.c | 21 +++++++++++++++++++++ src/http/ngx_http_core_module.h | 3 +++ 6 files changed, 76 insertions(+)
This commit is contained in:
parent
252a0fe77a
commit
eb320c97bd
6 changed files with 78 additions and 0 deletions
12
auto/unix
12
auto/unix
|
@ -344,6 +344,18 @@ ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_KEEPIDLE, NULL, 0);
|
||||||
. auto/feature
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
|
ngx_feature="TCP_FASTOPEN"
|
||||||
|
ngx_feature_name="NGX_HAVE_TCP_FASTOPEN"
|
||||||
|
ngx_feature_run=no
|
||||||
|
ngx_feature_incs="#include <sys/socket.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <netinet/tcp.h>"
|
||||||
|
ngx_feature_path=
|
||||||
|
ngx_feature_libs=
|
||||||
|
ngx_feature_test="setsockopt(0, IPPROTO_TCP, TCP_FASTOPEN, NULL, 0)"
|
||||||
|
. auto/feature
|
||||||
|
|
||||||
|
|
||||||
ngx_feature="TCP_INFO"
|
ngx_feature="TCP_INFO"
|
||||||
ngx_feature_name="NGX_HAVE_TCP_INFO"
|
ngx_feature_name="NGX_HAVE_TCP_INFO"
|
||||||
ngx_feature_run=no
|
ngx_feature_run=no
|
||||||
|
|
|
@ -82,6 +82,10 @@ ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen)
|
||||||
ls->setfib = -1;
|
ls->setfib = -1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
ls->fastopen = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
return ls;
|
return ls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -209,6 +213,21 @@ ngx_set_inherited_sockets(ngx_cycle_t *cycle)
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
|
||||||
|
if (getsockopt(ls[i].fastopen, IPPROTO_TCP, TCP_FASTOPEN,
|
||||||
|
(void *) &ls[i].fastopen, &olen)
|
||||||
|
== -1)
|
||||||
|
{
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||||
|
"getsockopt(TCP_FASTOPEN) %V failed, ignored",
|
||||||
|
&ls[i].addr_text);
|
||||||
|
|
||||||
|
ls[i].fastopen = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
|
#if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
|
||||||
|
|
||||||
ngx_memzero(&af, sizeof(struct accept_filter_arg));
|
ngx_memzero(&af, sizeof(struct accept_filter_arg));
|
||||||
|
@ -582,6 +601,19 @@ ngx_configure_listening_sockets(ngx_cycle_t *cycle)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
if (ls[i].fastopen != -1) {
|
||||||
|
if (setsockopt(ls[i].fd, IPPROTO_TCP, TCP_FASTOPEN,
|
||||||
|
(const void *) &ls[i].fastopen, sizeof(int))
|
||||||
|
== -1)
|
||||||
|
{
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_socket_errno,
|
||||||
|
"setsockopt(TCP_FASTOPEN, %d) %V failed, ignored",
|
||||||
|
ls[i].fastopen, &ls[i].addr_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (1) {
|
if (1) {
|
||||||
int tcp_nodelay = 1;
|
int tcp_nodelay = 1;
|
||||||
|
|
|
@ -80,6 +80,10 @@ struct ngx_listening_s {
|
||||||
int setfib;
|
int setfib;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
int fastopen;
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1811,6 +1811,10 @@ ngx_http_add_listening(ngx_conf_t *cf, ngx_http_conf_addr_t *addr)
|
||||||
ls->setfib = addr->opt.setfib;
|
ls->setfib = addr->opt.setfib;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
ls->fastopen = addr->opt.fastopen;
|
||||||
|
#endif
|
||||||
|
|
||||||
return ls;
|
return ls;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3040,6 +3040,9 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
|
||||||
lsopt.sndbuf = -1;
|
lsopt.sndbuf = -1;
|
||||||
#if (NGX_HAVE_SETFIB)
|
#if (NGX_HAVE_SETFIB)
|
||||||
lsopt.setfib = -1;
|
lsopt.setfib = -1;
|
||||||
|
#endif
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
lsopt.fastopen = -1;
|
||||||
#endif
|
#endif
|
||||||
lsopt.wildcard = 1;
|
lsopt.wildcard = 1;
|
||||||
|
|
||||||
|
@ -3988,6 +3991,9 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||||
lsopt.sndbuf = -1;
|
lsopt.sndbuf = -1;
|
||||||
#if (NGX_HAVE_SETFIB)
|
#if (NGX_HAVE_SETFIB)
|
||||||
lsopt.setfib = -1;
|
lsopt.setfib = -1;
|
||||||
|
#endif
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
lsopt.fastopen = -1;
|
||||||
#endif
|
#endif
|
||||||
lsopt.wildcard = u.wildcard;
|
lsopt.wildcard = u.wildcard;
|
||||||
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
|
||||||
|
@ -4027,6 +4033,23 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
if (ngx_strncmp(value[n].data, "fastopen=", 9) == 0) {
|
||||||
|
lsopt.fastopen = ngx_atoi(value[n].data + 9, value[n].len - 9);
|
||||||
|
lsopt.set = 1;
|
||||||
|
lsopt.bind = 1;
|
||||||
|
|
||||||
|
if (lsopt.fastopen == NGX_ERROR) {
|
||||||
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
|
"invalid fastopen \"%V\"", &value[n]);
|
||||||
|
return NGX_CONF_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) {
|
if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) {
|
||||||
lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8);
|
lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8);
|
||||||
lsopt.set = 1;
|
lsopt.set = 1;
|
||||||
|
|
|
@ -89,6 +89,9 @@ typedef struct {
|
||||||
#if (NGX_HAVE_SETFIB)
|
#if (NGX_HAVE_SETFIB)
|
||||||
int setfib;
|
int setfib;
|
||||||
#endif
|
#endif
|
||||||
|
#if (NGX_HAVE_TCP_FASTOPEN)
|
||||||
|
int fastopen;
|
||||||
|
#endif
|
||||||
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
|
#if (NGX_HAVE_KEEPALIVE_TUNABLE)
|
||||||
int tcp_keepidle;
|
int tcp_keepidle;
|
||||||
int tcp_keepintvl;
|
int tcp_keepintvl;
|
||||||
|
|
Loading…
Reference in a new issue