[nginx] Win32: fixed ngx_errno vs. ngx_socket_errno usage.

Maxim Dounin mdounin at mdounin.ru
Wed Jan 7 15:38:30 UTC 2026


details:   http://freenginx.org/hg/nginx/rev/a7b7067ffe3f
branches:  
changeset: 9456:a7b7067ffe3f
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Wed Jan 07 18:23:21 2026 +0300
description:
Win32: fixed ngx_errno vs. ngx_socket_errno usage.

The ngx_socket_errno macro, and not ngx_errno, should be used on Windows
to get an error after calling socket functions.  And vice versa, after
non-socket functions ngx_errno should be used.

In modern Windows versions these are believed to be equivalent in practice,
as WSAGetLastError() simply calls GetLastError(), so this is a mostly style
change[1][2].  The documentation still suggests that WSAGetLastError()
should be used after socket functions though.

[1] https://devblogs.microsoft.com/oldnewthing/20050908-19/?p=34283
[2] https://github.com/tongzx/nt5src/blob/master/Source/XPSP1/NT/net/sockets/winsock2/ws2_32/src/perthrd.cpp

diffstat:

 src/event/modules/ngx_win32_poll_module.c |   2 +-
 src/event/ngx_event_connectex.c           |   2 +-
 src/event/ngx_event_openssl.c             |  18 +++++++++---------
 3 files changed, 11 insertions(+), 11 deletions(-)

diffs (108 lines):

diff --git a/src/event/modules/ngx_win32_poll_module.c b/src/event/modules/ngx_win32_poll_module.c
--- a/src/event/modules/ngx_win32_poll_module.c
+++ b/src/event/modules/ngx_win32_poll_module.c
@@ -284,7 +284,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc
 
     ready = WSAPoll(event_list, (u_int) nevents, (int) timer);
 
-    err = (ready == -1) ? ngx_errno : 0;
+    err = (ready == -1) ? ngx_socket_errno : 0;
 
     if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
         ngx_time_update();
diff --git a/src/event/ngx_event_connectex.c b/src/event/ngx_event_connectex.c
--- a/src/event/ngx_event_connectex.c
+++ b/src/event/ngx_event_connectex.c
@@ -176,7 +176,7 @@ void ngx_iocp_wait_events(int main)
             if (PostQueuedCompletionStatus(iocp, 0, NGX_IOCP_CONNECT,
                                            &conn[n].write->ovlp) == 0)
             {
-                ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
+                ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                               "PostQueuedCompletionStatus() failed");
                 continue;
             }
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -2423,7 +2423,7 @@ ngx_ssl_handshake(ngx_connection_t *c)
         return NGX_AGAIN;
     }
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     c->ssl->no_wait_shutdown = 1;
     c->ssl->no_send_shutdown = 1;
@@ -2570,7 +2570,7 @@ ngx_ssl_try_early_data(ngx_connection_t 
         return NGX_AGAIN;
     }
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     c->ssl->no_wait_shutdown = 1;
     c->ssl->no_send_shutdown = 1;
@@ -3039,7 +3039,7 @@ ngx_ssl_handle_recv(ngx_connection_t *c,
 
     sslerr = SSL_get_error(c->ssl->connection, n);
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
 
@@ -3363,7 +3363,7 @@ ngx_ssl_write(ngx_connection_t *c, u_cha
         sslerr = SSL_ERROR_SYSCALL;
     }
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
 
@@ -3467,7 +3467,7 @@ ngx_ssl_write_early(ngx_connection_t *c,
 
     sslerr = SSL_get_error(c->ssl->connection, n);
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
 
@@ -3624,7 +3624,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
 
     if (sslerr == SSL_ERROR_SSL
         && ERR_GET_REASON(ERR_peek_error()) == SSL_R_UNINITIALIZED
-        && ngx_errno != 0)
+        && ngx_socket_errno != 0)
     {
         /*
          * OpenSSL fails to return SSL_ERROR_SYSCALL if an error
@@ -3635,7 +3635,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
         sslerr = SSL_ERROR_SYSCALL;
     }
 
-    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+    err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
 
@@ -3656,7 +3656,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
 
 #if (NGX_HAVE_SENDFILE_NODISKIO)
 
-        if (ngx_errno == EBUSY) {
+        if (ngx_socket_errno == EBUSY) {
             c->busy_count++;
 
             ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
@@ -3848,7 +3848,7 @@ ngx_ssl_shutdown(ngx_connection_t *c)
             goto done;
         }
 
-        err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
+        err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
 
         ngx_ssl_connection_error(c, sslerr, err, "SSL_shutdown() failed");
 


More information about the nginx-devel mailing list