From: Roman Arutyunyan Date: Mon, 2 Mar 2015 18:15:46 +0000 (+0300) Subject: SSL: reset ready flag if recv(MSG_PEEK) found no bytes in socket. X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=46a2236f226d7a68a6e830b8fd2c618c12bf4ca9;p=nginx.git 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 index a07d5e47f..0ee145dd6 100644 --- 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);