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