[PATCH 3 of 4] Win32: fixed ngx_errno vs. ngx_socket_errno usage
Maxim Dounin
mdounin at mdounin.ru
Sun Dec 28 17:36:49 UTC 2025
# HG changeset patch
# User Maxim Dounin <mdounin at mdounin.ru>
# Date 1766623517 -10800
# Thu Dec 25 03:45:17 2025 +0300
# Node ID b2a44f0a26068f3eb6d66a80d789ac6177672ce7
# Parent 5b137aa1f392d76b055c889bf25ebe66a191d343
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
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