# HG changeset patch # User Roman Arutyunyan # Date 1425320146 -10800 # Node ID 5b549cc7f698e4166f45bdad96b9d8945424f7be # Parent 174512857ccff69715ac89fa5f3841a1e0e4d0c9 SSL: reset ready flag if recv(MSG_PEEK) found no bytes in socket. Previously, connection hung after calling ngx_http_ssl_handshake() with rev->ready set and no bytes in socket to read. It's possible in at least the following cases: - when processing a connection with expired TCP_DEFER_ACCEPT on Linux - after parsing PROXY protocol header if it arrived in a separate TCP packet Thanks to James Hamlin. diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -652,6 +652,7 @@ ngx_http_ssl_handshake(ngx_event_t *rev) if (n == -1) { if (err == NGX_EAGAIN) { + rev->ready = 0; if (!rev->timer_set) { ngx_add_timer(rev, c->listening->post_accept_timeout);