details: https://hg.nginx.org/nginx/rev/bed832296f5d branches: changeset: 9221:bed832296f5d user: Sergey Kandaurov <pluk...@nginx.com> date: Fri Mar 22 14:53:19 2024 +0400 description: Stream: the "deferred" parameter of the "listen" directive.
The Linux TCP_DEFER_ACCEPT support. diffstat: src/stream/ngx_stream.c | 4 ++++ src/stream/ngx_stream.h | 1 + src/stream/ngx_stream_core_module.c | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+), 0 deletions(-) diffs (61 lines): diff -r c8cf6b1cc82e -r bed832296f5d src/stream/ngx_stream.c --- a/src/stream/ngx_stream.c Fri Mar 22 14:53:19 2024 +0400 +++ b/src/stream/ngx_stream.c Fri Mar 22 14:53:19 2024 +0400 @@ -1021,6 +1021,10 @@ ngx_stream_add_listening(ngx_conf_t *cf, ls->keepcnt = addr->opt.tcp_keepcnt; #endif +#if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) + ls->deferred_accept = addr->opt.deferred_accept; +#endif + #if (NGX_HAVE_INET6) ls->ipv6only = addr->opt.ipv6only; #endif diff -r c8cf6b1cc82e -r bed832296f5d src/stream/ngx_stream.h --- a/src/stream/ngx_stream.h Fri Mar 22 14:53:19 2024 +0400 +++ b/src/stream/ngx_stream.h Fri Mar 22 14:53:19 2024 +0400 @@ -53,6 +53,7 @@ typedef struct { #if (NGX_HAVE_INET6) unsigned ipv6only:1; #endif + unsigned deferred_accept:1; unsigned reuseport:1; unsigned so_keepalive:2; unsigned proxy_protocol:1; diff -r c8cf6b1cc82e -r bed832296f5d src/stream/ngx_stream_core_module.c --- a/src/stream/ngx_stream_core_module.c Fri Mar 22 14:53:19 2024 +0400 +++ b/src/stream/ngx_stream_core_module.c Fri Mar 22 14:53:19 2024 +0400 @@ -1015,6 +1015,19 @@ ngx_stream_core_listen(ngx_conf_t *cf, n continue; } + if (ngx_strcmp(value[i].data, "deferred") == 0) { +#if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) + lsopt.deferred_accept = 1; + lsopt.set = 1; + lsopt.bind = 1; +#else + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "the deferred accept is not supported " + "on this platform, ignored"); +#endif + continue; + } + if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) if (ngx_strcmp(&value[i].data[10], "n") == 0) { @@ -1173,6 +1186,12 @@ ngx_stream_core_listen(ngx_conf_t *cf, n return "\"backlog\" parameter is incompatible with \"udp\""; } +#if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) + if (lsopt.deferred_accept) { + return "\"deferred\" parameter is incompatible with \"udp\""; + } +#endif + #if (NGX_STREAM_SSL) if (lsopt.ssl) { return "\"ssl\" parameter is incompatible with \"udp\""; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org https://mailman.nginx.org/mailman/listinfo/nginx-devel