[PATCH] Core: handle getsockopt(TCP_FASTOPEN) failures.

Ruslan Ermilov ru at nginx.com
Wed Jan 29 14:28:05 UTC 2014


On Tue, Jan 28, 2014 at 08:19:57PM -0800, Piotr Sikora wrote:
> # HG changeset patch
> # User Piotr Sikora <piotr at cloudflare.com>
> # Date 1390968940 28800
> #      Tue Jan 28 20:15:40 2014 -0800
> # Node ID ae13ab8f53fe451d2201a68091ddecc3d36d582d
> # Parent  fdb67cfc957d110ea887961cc8c08a590df5f62c
> Core: handle getsockopt(TCP_FASTOPEN) failures.
> 
> Linux returns EOPNOTSUPP for non-TCP sockets and ENOPROTOOPT for TCP
> sockets, because getsockopt(TCP_FASTOPEN) is not implemented so far.
> 
> While there, lower the log level from ALERT to NOTICE to match other
> getsockopt() failures.
> 
> Signed-off-by: Piotr Sikora <piotr at cloudflare.com>
> 
> diff -r fdb67cfc957d -r ae13ab8f53fe src/core/ngx_connection.c
> --- a/src/core/ngx_connection.c Tue Jan 28 15:40:46 2014 +0400
> +++ b/src/core/ngx_connection.c Tue Jan 28 20:15:40 2014 -0800
> @@ -97,7 +97,7 @@ ngx_set_inherited_sockets(ngx_cycle_t *c
>      ngx_uint_t                 i;
>      ngx_listening_t           *ls;
>      socklen_t                  olen;
> -#if (NGX_HAVE_DEFERRED_ACCEPT)
> +#if (NGX_HAVE_DEFERRED_ACCEPT || NGX_HAVE_TCP_FASTOPEN)
>      ngx_err_t                  err;
>  #endif
>  #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
> @@ -223,9 +223,13 @@ ngx_set_inherited_sockets(ngx_cycle_t *c
>                         (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);
> +            err = ngx_errno;
> +
> +            if (err != NGX_EOPNOTSUPP && err != NGX_ENOPROTOOPT) {
> +                ngx_log_error(NGX_LOG_NOTICE, cycle->log, err,
> +                              "getsockopt(TCP_FASTOPEN) %V failed, ignored",
> +                              &ls[i].addr_text);
> +            }

I only have a style comment.  I think it should formatted as in the
TCP_DEFER_ACCEPT case, i.e. the errno check with "continue".

> 
>              ls[i].fastopen = -1;
>          }
> diff -r fdb67cfc957d -r ae13ab8f53fe src/os/unix/ngx_errno.h
> --- a/src/os/unix/ngx_errno.h Tue Jan 28 15:40:46 2014 +0400
> +++ b/src/os/unix/ngx_errno.h Tue Jan 28 20:15:40 2014 -0800
> @@ -34,6 +34,7 @@ typedef int               ngx_err_t;
>  #define NGX_ENOSPC        ENOSPC
>  #define NGX_EPIPE         EPIPE
>  #define NGX_EINPROGRESS   EINPROGRESS
> +#define NGX_ENOPROTOOPT   ENOPROTOOPT
>  #define NGX_EOPNOTSUPP    EOPNOTSUPP
>  #define NGX_EADDRINUSE    EADDRINUSE
>  #define NGX_ECONNABORTED  ECONNABORTED
> diff -r fdb67cfc957d -r ae13ab8f53fe src/os/win32/ngx_errno.h
> --- a/src/os/win32/ngx_errno.h Tue Jan 28 15:40:46 2014 +0400
> +++ b/src/os/win32/ngx_errno.h Tue Jan 28 20:15:40 2014 -0800
> @@ -38,6 +38,7 @@ typedef DWORD                      ngx_e
>  #define NGX_EPIPE                  EPIPE
>  #define NGX_EAGAIN                 WSAEWOULDBLOCK
>  #define NGX_EINPROGRESS            WSAEINPROGRESS
> +#define NGX_ENOPROTOOPT            WSAENOPROTOOPT
>  #define NGX_EOPNOTSUPP             WSAEOPNOTSUPP
>  #define NGX_EADDRINUSE             WSAEADDRINUSE
>  #define NGX_ECONNABORTED           WSAECONNABORTED



More information about the nginx-devel mailing list