[nginx] Core: disabled SO_REUSEPORT when testing config (ticket #1300).

Sepherosa Ziehau sepherosa at gmail.com
Fri Jul 21 02:55:59 UTC 2017


Heh, interesting discover :)

On Wed, Jul 12, 2017 at 1:18 AM, Maxim Dounin <mdounin at mdounin.ru> wrote:
> details:   http://hg.nginx.org/nginx/rev/ecb5cd305b06
> branches:
> changeset: 7064:ecb5cd305b06
> user:      Maxim Dounin <mdounin at mdounin.ru>
> date:      Tue Jul 11 19:59:56 2017 +0300
> description:
> Core: disabled SO_REUSEPORT when testing config (ticket #1300).
>
> When closing a socket with SO_REUSEPORT, Linux drops all connections waiting
> in this socket's listen queue.  Previously, it was believed to only result
> in connection resets when reconfiguring nginx to use smaller number of worker
> processes.  It also results in connection resets during configuration
> testing though.
>
> Workaround is to avoid using SO_REUSEPORT when testing configuration.  It
> should prevent listening sockets from being created if a conflicting socket
> already exists, while still preserving detection of other possible errors.
> It should also cover UDP sockets.
>
> The only downside of this approach seems to be that a configuration testing
> won't be able to properly report the case when nginx was compiled with
> SO_REUSEPORT, but the kernel is not able to set it.  Such errors will be
> reported on a real start instead.
>
> diffstat:
>
>  src/core/ngx_connection.c |  2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
>
> diffs (12 lines):
>
> diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c
> --- a/src/core/ngx_connection.c
> +++ b/src/core/ngx_connection.c
> @@ -473,7 +473,7 @@ ngx_open_listening_sockets(ngx_cycle_t *
>
>  #if (NGX_HAVE_REUSEPORT)
>
> -            if (ls[i].reuseport) {
> +            if (ls[i].reuseport && !ngx_test_config) {
>                  int  reuseport;
>
>                  reuseport = 1;
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel



-- 
Tomorrow Will Never Die


More information about the nginx-devel mailing list