Details
Description
Easily reproducible:
Follow the instructions as detailed here: A single HTTP/HTTPS server
Then request https://127.0.0.1
Nginx stops working because the socket is blocked, if you stops the page loading then Nginx starts working again.
I took a trace with api monitor in windows XP, it is as follow:
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe recv ( 296, 0x0189695b, 16709, 0 ) 37
|
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe recv ( 296, 0x0189695b, 16709, 0 ) SOCKET_ERROR 10035 = No se puede completar de forma inmediata una operaciĆ³n de desbloqueo de socket.
|
nginx.exe WSAGetLastError ( ) WSAEWOULDBLOCK
|
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe recv ( 296, 0x0189695b, 16709, 0 ) 1061
|
nginx.exe ioctlsocket ( 296, FIONREAD, 0x01a6ff18 ) 0
|
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe recv ( 296, 0x0189695b, 16709, 0 ) SOCKET_ERROR 10035 = No se puede completar de forma inmediata una operaciĆ³n de desbloqueo de socket.
|
nginx.exe WSAGetLastError ( ) WSAEWOULDBLOCK
|
nginx.exe WSASetLastError ( ERROR_SUCCESS )
|
nginx.exe send ( 296, 0x0188f90b, 213, 0 ) 213
|
So I added a couple of DPRINTs in recv() to see what's happening:
@@ -58,10 +58,11 @@ recv(IN SOCKET s,
|
|
/* Return Provider Value */
|
if (Status == ERROR_SUCCESS)
|
{
|
/* Handle OOB */
|
+ DPRINT("recv bytes received %lu\n", BytesReceived);
|
if (!(flags & MSG_PARTIAL)) return BytesReceived;
|
ErrorCode = WSAEMSGSIZE;
|
}
|
|
/* If everything seemed fine, then the WSP call failed itself */
|
@@ -74,10 +75,11 @@ recv(IN SOCKET s,
|
}
|
}
|
|
/* Return with an Error */
|
SetLastError(ErrorCode);
|
+ DPRINT("recv error code %d\n", ErrorCode);
|
return SOCKET_ERROR;
|
}
|
|
/*
|
* @implemented
|
This patch leads to this log:
(/dll/win32/ws2_32/src/recv.c:34) recv: 76c, 2, 1, 00ABFEF4
|
(/dll/win32/ws2_32/src/recv.c:63) recv bytes received 1
|
(/dll/win32/ws2_32/src/recv.c:34) recv: 76c, 0, 4145, 00946003
|
(/dll/win32/ws2_32/src/recv.c:63) recv bytes received 552
|
(/dll/win32/ws2_32/src/recv.c:34) recv: 76c, 0, 4145, 0094F1C3
|
(/dll/win32/ws2_32/src/recv.c:63) recv bytes received 51
|
(/dll/win32/ws2_32/src/recv.c:34) recv: 76c, 0, 4145, 0093BFB3
|
(/dll/win32/ws2_32/src/recv.c:63) recv bytes received 1060
|
(/dll/win32/ws2_32/src/recv.c:34) recv: 76c, 0, 4145, 0093BFB3
|
Then it stops until either I stop page loading in browser, or kill nginx.exe. In both cases we never reach the send() call.
Attachments
Issue Links
- is duplicated by
-
CORE-18301 NGINX not working with HTTPS (request getting stuck)
- Resolved
- relates to
-
CORE-12828 Firefox 51.0.1 doesn't start
- Resolved