Stream: the "fastopen" parameter of the "listen" directive.

Based on a patch by Anbang Wen.
This commit is contained in:
Ruslan Ermilov 2021-05-20 19:59:16 +03:00
parent 6029e211c6
commit ecbe06b9fe
3 changed files with 32 additions and 0 deletions

View File

@ -510,6 +510,10 @@ ngx_stream_optimize_servers(ngx_conf_t *cf, ngx_array_t *ports)
ls->ipv6only = addr[i].opt.ipv6only; ls->ipv6only = addr[i].opt.ipv6only;
#endif #endif
#if (NGX_HAVE_TCP_FASTOPEN)
ls->fastopen = addr[i].opt.fastopen;
#endif
#if (NGX_HAVE_REUSEPORT) #if (NGX_HAVE_REUSEPORT)
ls->reuseport = addr[i].opt.reuseport; ls->reuseport = addr[i].opt.reuseport;
#endif #endif

View File

@ -65,6 +65,9 @@ typedef struct {
int backlog; int backlog;
int rcvbuf; int rcvbuf;
int sndbuf; int sndbuf;
#if (NGX_HAVE_TCP_FASTOPEN)
int fastopen;
#endif
int type; int type;
} ngx_stream_listen_t; } ngx_stream_listen_t;

View File

@ -615,6 +615,10 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ls->type = SOCK_STREAM; ls->type = SOCK_STREAM;
ls->ctx = cf->ctx; ls->ctx = cf->ctx;
#if (NGX_HAVE_TCP_FASTOPEN)
ls->fastopen = -1;
#endif
#if (NGX_HAVE_INET6) #if (NGX_HAVE_INET6)
ls->ipv6only = 1; ls->ipv6only = 1;
#endif #endif
@ -635,6 +639,21 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
continue; continue;
} }
#if (NGX_HAVE_TCP_FASTOPEN)
if (ngx_strncmp(value[i].data, "fastopen=", 9) == 0) {
ls->fastopen = ngx_atoi(value[i].data + 9, value[i].len - 9);
ls->bind = 1;
if (ls->fastopen == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid fastopen \"%V\"", &value[i]);
return NGX_CONF_ERROR;
}
continue;
}
#endif
if (ngx_strncmp(value[i].data, "backlog=", 8) == 0) { if (ngx_strncmp(value[i].data, "backlog=", 8) == 0) {
ls->backlog = ngx_atoi(value[i].data + 8, value[i].len - 8); ls->backlog = ngx_atoi(value[i].data + 8, value[i].len - 8);
ls->bind = 1; ls->bind = 1;
@ -859,6 +878,12 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
if (ls->proxy_protocol) { if (ls->proxy_protocol) {
return "\"proxy_protocol\" parameter is incompatible with \"udp\""; return "\"proxy_protocol\" parameter is incompatible with \"udp\"";
} }
#if (NGX_HAVE_TCP_FASTOPEN)
if (ls->fastopen != -1) {
return "\"fastopen\" parameter is incompatible with \"udp\"";
}
#endif
} }
als = cmcf->listen.elts; als = cmcf->listen.elts;