Author: vbart Date: 2013-03-15 19:49:54 +0000 (Fri, 15 Mar 2013) New Revision: 5115 URL: http://trac.nginx.org/nginx/changeset/5115/nginx
Log: Allow to reuse connections that wait their first request. This should improve behavior under deficiency of connections. Since SSL handshake usually takes significant amount of time, we exclude connections from reusable queue during this period to avoid premature flush of them. Modified: trunk/src/http/ngx_http_request.c Modified: trunk/src/http/ngx_http_request.c =================================================================== --- trunk/src/http/ngx_http_request.c 2013-03-14 16:22:43 UTC (rev 5114) +++ trunk/src/http/ngx_http_request.c 2013-03-15 19:49:54 UTC (rev 5115) @@ -355,6 +355,7 @@ } ngx_add_timer(rev, c->listening->post_accept_timeout); + ngx_reusable_connection(c, 1); if (ngx_handle_read_event(rev, 0) != NGX_OK) { ngx_http_close_connection(c); @@ -383,6 +384,11 @@ return; } + if (c->close) { + ngx_http_close_connection(c); + return; + } + hc = c->data; cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module); @@ -432,6 +438,7 @@ if (!rev->timer_set) { ngx_add_timer(rev, c->listening->post_accept_timeout); + ngx_reusable_connection(c, 1); } if (ngx_handle_read_event(rev, 0) != NGX_OK) { @@ -466,6 +473,8 @@ c->log->action = "reading client request line"; + ngx_reusable_connection(c, 0); + c->data = ngx_http_create_request(c); if (c->data == NULL) { ngx_http_close_connection(c); @@ -611,6 +620,11 @@ return; } + if (c->close) { + ngx_http_close_connection(c); + return; + } + n = recv(c->fd, (char *) buf, 1, MSG_PEEK); err = ngx_socket_errno; @@ -631,6 +645,7 @@ if (!rev->timer_set) { ngx_add_timer(rev, c->listening->post_accept_timeout); + ngx_reusable_connection(c, 1); } if (ngx_handle_read_event(rev, 0) != NGX_OK) { @@ -670,6 +685,8 @@ ngx_add_timer(rev, c->listening->post_accept_timeout); } + ngx_reusable_connection(c, 0); + c->ssl->handler = ngx_http_ssl_handshake_handler; return; } @@ -714,6 +731,8 @@ c->read->handler = ngx_http_wait_request_handler; /* STUB: epoll edge */ c->write->handler = ngx_http_empty_handler; + ngx_reusable_connection(c, 1); + ngx_http_wait_request_handler(c->read); return; _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel