details: http://freenginx.org/hg/nginx/rev/a7b7067ffe3f branches: changeset: 9456:a7b7067ffe3f user: Maxim Dounin <[email protected]> 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");
