akosut 97/01/25 17:15:18
Modified: src CHANGES http_config.c http_core.c http_protocol.c
httpd.h
Log:
Change KeepAlive semantics, add MaxKeepAliveRequests directives (NCSA-style).
Change keep-alive defaults.
Reviewed by: Dean Gaudet, Marc Slemko
Revision Changes Path
1.136 +3 -0 apache/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /export/home/cvs/apache/src/CHANGES,v
retrieving revision 1.135
retrieving revision 1.136
diff -C3 -r1.135 -r1.136
*** CHANGES 1997/01/25 22:42:56 1.135
--- CHANGES 1997/01/26 01:15:11 1.136
***************
*** 1,5 ****
--- 1,8 ----
Changes with Apache 1.2b5
+ *) Change KeepAlive semantics (On|Off instead of a number), add
+ MaxKeepAliveRequests directive. [Alexei Kosut]
+
*) Various NeXT compilation patches, as well as a change in
regex/regcomp.c since that file also used a NEXT define.
[Andreas Koenig]
1.42 +6 -1 apache/src/http_config.c
Index: http_config.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_config.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -C3 -r1.41 -r1.42
*** http_config.c 1997/01/20 04:28:07 1.41
--- http_config.c 1997/01/26 01:15:11 1.42
***************
*** 936,941 ****
--- 936,942 ----
s->timeout = 0;
s->keep_alive_timeout = 0;
s->keep_alive = -1;
+ s->keep_alive_max = -1;
/* start the list of addreses */
addrs = &s->addrs;
while( hostname[0] ) {
***************
*** 998,1003 ****
--- 999,1007 ----
if (virt->keep_alive == -1)
virt->keep_alive = main_server->keep_alive;
+ if (virt->keep_alive_max == -1)
+ virt->keep_alive_max = main_server->keep_alive_max;
+
if (virt->send_buffer_size == 0)
virt->send_buffer_size = main_server->send_buffer_size;
}
***************
*** 1040,1046 ****
s->access_confname = ACCESS_CONFIG_FILE;
s->timeout = DEFAULT_TIMEOUT;
s->keep_alive_timeout = DEFAULT_KEEPALIVE_TIMEOUT;
! s->keep_alive = DEFAULT_KEEPALIVE;
s->next = NULL;
s->addrs = pcalloc(p, sizeof (server_addr_rec));
s->addrs->host_addr.s_addr = htonl (INADDR_ANY); /* NOT virtual host;
--- 1044,1051 ----
s->access_confname = ACCESS_CONFIG_FILE;
s->timeout = DEFAULT_TIMEOUT;
s->keep_alive_timeout = DEFAULT_KEEPALIVE_TIMEOUT;
! s->keep_alive_max = DEFAULT_KEEPALIVE;
! s->keep_alive = 1;
s->next = NULL;
s->addrs = pcalloc(p, sizeof (server_addr_rec));
s->addrs->host_addr.s_addr = htonl (INADDR_ANY); /* NOT virtual host;
1.61 +14 -2 apache/src/http_core.c
Index: http_core.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_core.c,v
retrieving revision 1.60
retrieving revision 1.61
diff -C3 -r1.60 -r1.61
*** http_core.c 1997/01/24 07:42:45 1.60
--- http_core.c 1997/01/26 01:15:12 1.61
***************
*** 899,905 ****
}
const char *set_keep_alive (cmd_parms *cmd, void *dummy, char *arg) {
! cmd->server->keep_alive = atoi (arg);
return NULL;
}
--- 899,916 ----
}
const char *set_keep_alive (cmd_parms *cmd, void *dummy, char *arg) {
! /* We've changed it to On/Off, but used to use numbers
! * so we accept anything but "Off" or "0" as "On"
! */
! if (!strcasecmp(arg, "off") || !strcmp(arg, "0"))
! cmd->server->keep_alive = 0;
! else
! cmd->server->keep_alive = 1;
! return NULL;
! }
!
! const char *set_keep_alive_max (cmd_parms *cmd, void *dummy, char *arg) {
! cmd->server->keep_alive_max = atoi (arg);
return NULL;
}
***************
*** 1172,1178 ****
"The pathname the server can be reached at" },
{ "Timeout", set_timeout, NULL, RSRC_CONF, TAKE1, "Timeout duration (sec)"},
{ "KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF, TAKE1,
"Keep-Alive timeout duration (sec)"},
! { "KeepAlive", set_keep_alive, NULL, RSRC_CONF, TAKE1, "Maximum Keep-Alive
requests per connection (0 to disable)" },
{ "IdentityCheck", set_idcheck, NULL, RSRC_CONF|ACCESS_CONF, FLAG, "Enable
identd (RFC931) user lookups - SLOW" },
{ "ContentDigest", set_content_md5, NULL, RSRC_CONF|ACCESS_CONF|OR_AUTHCFG,
FLAG, "whether or not to send a Content-MD5 header with each request" },
{ "StartServers", set_daemons_to_start, NULL, RSRC_CONF, TAKE1, "Number of
child processes launched at server startup" },
--- 1183,1190 ----
"The pathname the server can be reached at" },
{ "Timeout", set_timeout, NULL, RSRC_CONF, TAKE1, "Timeout duration (sec)"},
{ "KeepAliveTimeout", set_keep_alive_timeout, NULL, RSRC_CONF, TAKE1,
"Keep-Alive timeout duration (sec)"},
! { "MaxKeepAliveRequests", set_keep_alive_max, NULL, RSRC_CONF, TAKE1,
"Maximum number of Keep-Alive requests per connection, or 0 for infinite" },
! { "KeepAlive", set_keep_alive, NULL, RSRC_CONF, TAKE1, "Whether persistent
connections should be On or Off" },
{ "IdentityCheck", set_idcheck, NULL, RSRC_CONF|ACCESS_CONF, FLAG, "Enable
identd (RFC931) user lookups - SLOW" },
{ "ContentDigest", set_content_md5, NULL, RSRC_CONF|ACCESS_CONF|OR_AUTHCFG,
FLAG, "whether or not to send a Content-MD5 header with each request" },
{ "StartServers", set_daemons_to_start, NULL, RSRC_CONF, TAKE1, "Number of
child processes launched at server startup" },
1.93 +9 -4 apache/src/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /export/home/cvs/apache/src/http_protocol.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -C3 -r1.92 -r1.93
*** http_protocol.c 1997/01/25 22:37:12 1.92
--- http_protocol.c 1997/01/26 01:15:13 1.93
***************
*** 213,219 ****
if (r->connection->keepalive == -1) /* Did we get bad input? */
r->connection->keepalive = 0;
! else if ((r->server->keep_alive > r->connection->keepalives) &&
(r->server->keep_alive_timeout > 0) &&
(r->header_only || length || tenc ||
((r->proto_num >= 1001) && (r->byterange > 1 || (r->chunked = 1)))) &&
--- 213,220 ----
if (r->connection->keepalive == -1) /* Did we get bad input? */
r->connection->keepalive = 0;
! else if (r->server->keep_alive && (!r->server->keep_alive_max ||
! (r->server->keep_alive_max > r->connection->keepalives)) &&
(r->server->keep_alive_timeout > 0) &&
(r->header_only || length || tenc ||
((r->proto_num >= 1001) && (r->byterange > 1 || (r->chunked = 1)))) &&
***************
*** 226,240 ****
* length-delimited. It is not a bug, though it is annoying.
*/
char header[256];
! int left = r->server->keep_alive - r->connection->keepalives;
r->connection->keepalive = 1;
r->connection->keepalives++;
/* If they sent a Keep-Alive token, send one back */
if (ka_sent) {
! ap_snprintf(header, sizeof(header), "timeout=%d, max=%d",
! r->server->keep_alive_timeout, left);
rputs("Connection: Keep-Alive\015\012", r);
rvputs(r, "Keep-Alive: ", header, "\015\012", NULL);
}
--- 227,245 ----
* length-delimited. It is not a bug, though it is annoying.
*/
char header[256];
! int left = r->server->keep_alive_max - r->connection->keepalives;
r->connection->keepalive = 1;
r->connection->keepalives++;
/* If they sent a Keep-Alive token, send one back */
if (ka_sent) {
! if (r->server->keep_alive_max)
! ap_snprintf(header, sizeof(header), "timeout=%d, max=%d",
! r->server->keep_alive_timeout, left);
! else
! ap_snprintf(header, sizeof(header), "timeout=%d",
! r->server->keep_alive_timeout);
rputs("Connection: Keep-Alive\015\012", r);
rvputs(r, "Keep-Alive: ", header, "\015\012", NULL);
}
1.80 +3 -2 apache/src/httpd.h
Index: httpd.h
===================================================================
RCS file: /export/home/cvs/apache/src/httpd.h,v
retrieving revision 1.79
retrieving revision 1.80
diff -C3 -r1.79 -r1.80
*** httpd.h 1997/01/07 06:18:12 1.79
--- httpd.h 1997/01/26 01:15:14 1.80
***************
*** 187,193 ****
#define DEFAULT_KEEPALIVE_TIMEOUT 15
/* The number of requests to entertain per connection */
! #define DEFAULT_KEEPALIVE 5
/* The size of the server's internal read-write buffers */
#define IOBUFSIZE 8192
--- 187,193 ----
#define DEFAULT_KEEPALIVE_TIMEOUT 15
/* The number of requests to entertain per connection */
! #define DEFAULT_KEEPALIVE 100
/* The size of the server's internal read-write buffers */
#define IOBUFSIZE 8192
***************
*** 594,600 ****
server_addr_rec *addrs;
int timeout; /* Timeout, in seconds, before we give up */
int keep_alive_timeout; /* Seconds we'll wait for another request */
! int keep_alive; /* Maximum requests per connection */
int send_buffer_size; /* size of TCP send buffer (in bytes) */
char *path; /* Pathname for ServerPath */
--- 594,601 ----
server_addr_rec *addrs;
int timeout; /* Timeout, in seconds, before we give up */
int keep_alive_timeout; /* Seconds we'll wait for another request */
! int keep_alive_max; /* Maximum requests per connection */
! int keep_alive; /* Use persistent connections? */
int send_buffer_size; /* size of TCP send buffer (in bytes) */
char *path; /* Pathname for ServerPath */