# HG changeset patch # User Igor Sysoev # Date 1241010436 0 # Node ID 01c691e310324c28ac5c2396e8935309d74b6260 # Parent baad3036086e4faf4f05f2fda5cdf70500bab912 fix the previous commit 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 @@ -801,15 +801,13 @@ ngx_connection_error(ngx_connection_t *c { ngx_uint_t level; -#if (NGX_WIN32) - - /* Winsock returns NGX_ECONNABORTED instead of NGX_ECONNRESET */ + /* Winsock may return NGX_ECONNABORTED instead of NGX_ECONNRESET */ - if (err == NGX_ECONNABORTED -#else - if (err == NGX_ECONNRESET + if ((err == NGX_ECONNRESET +#if (NGX_WIN32) + || err == NGX_ECONNABORTED #endif - && c->log_error == NGX_ERROR_IGNORE_ECONNRESET) + ) && c->log_error == NGX_ERROR_IGNORE_ECONNRESET) { return 0; } diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c --- a/src/os/win32/ngx_wsarecv.c +++ b/src/os/win32/ngx_wsarecv.c @@ -16,6 +16,7 @@ ngx_wsarecv(ngx_connection_t *c, u_char u_long bytes, flags; WSABUF wsabuf[1]; ngx_err_t err; + ngx_uint_t n; ngx_event_t *rev; wsabuf[0].buf = (char *) buf; @@ -40,10 +41,13 @@ ngx_wsarecv(ngx_connection_t *c, u_char return NGX_AGAIN; } - rev->error = 1; - ngx_connection_error(c, err, "WSARecv() failed"); + n = ngx_connection_error(c, err, "WSARecv() failed"); - return NGX_ERROR; + if (n == NGX_ERROR){ + rev->error = 1; + } + + return n; } if (bytes < size) { @@ -65,6 +69,7 @@ ngx_overlapped_wsarecv(ngx_connection_t u_long bytes, flags; WSABUF wsabuf[1]; ngx_err_t err; + ngx_uint_t n; ngx_event_t *rev; LPWSAOVERLAPPED ovlp; @@ -131,9 +136,13 @@ ngx_overlapped_wsarecv(ngx_connection_t return NGX_AGAIN; } - rev->error = 1; - ngx_connection_error(c, err, "WSARecv() failed"); - return NGX_ERROR; + n = ngx_connection_error(c, err, "WSARecv() failed"); + + if (n == NGX_ERROR){ + rev->error = 1; + } + + return n; } if (ngx_event_flags & NGX_USE_IOCP_EVENT) {