-*- coding: utf-8 -*-
Changes with Apache 2.0.56
+ *) Elimiated the NET_TIME filter, restructuring the timeout logic.
+ This provides a working mod_echo on all platforms, and ensures any
+ custom protocol module is at least given an initial timeout value
+ based on the <VirtualHost > context's Timeout directive.
+ [William Rowe]
+
*) mod_ssl: Correct issue where mod_ssl does not pick up the
ssl-unclean-shutdown setting when configured. PR 34452. [Joe Orton]
as well.
colm: another +1 on the later patch too.
- *) Fix all non-http protocol modules that were modeled after the
- broken mod_echo.c example; remove the -initial- timeout setting
- from NET_TIME (never inserted by non-request based protocols)
- and move it to the core pre_connection logic, so every core
- connection can read with timeout on Linux, Solaris, instead of
- read (untimed) blocking on Linux, and failing read non-block on
- Solaris. Leaves NET_TIME intact until after the 2.0.x branch.
- http://people.apache.org/~wrowe/httpd-2.0-proto-timeout.patch
- +1: wrowe, colm, jim
-
*) mod_proxy: Fix PR37145
(data loss with httpd-2.0.55 reverse proxy method=post).
Trunk version of patch:
}
if (mode != AP_MODE_INIT && mode != AP_MODE_EATCRLF) {
- if (ctx->first_line) {
- apr_socket_timeout_set(ctx->csd,
- keptalive
- ? f->c->base_server->keep_alive_timeout
- : f->c->base_server->timeout);
+ if (keptalive && ctx->first_line) {
+ apr_socket_timeout_set(ctx->csd,
+ f->c->base_server->keep_alive_timeout);
ctx->first_line = 0;
}
else {
static int core_pre_connection(conn_rec *c, void *csd)
{
core_net_rec *net = apr_palloc(c->pool, sizeof(*net));
-
-#ifdef AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
apr_status_t rv;
+#ifdef AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
/* BillS says perhaps this should be moved to the MPMs. Some OSes
* allow listening socket attributes to be inherited by the
* accept sockets which means this call only needs to be made
"apr_socket_opt_set(APR_TCP_NODELAY)");
}
#endif
+
+ /* The core filter requires the timeout mode to be set, which
+ * incidentally sets the socket to be nonblocking. If this
+ * is not initialized correctly, Linux - for example - will
+ * be initially blocking, while Solaris will be non blocking
+ * and any initial read will fail.
+ */
+ rv = apr_socket_timeout_set(csd, c->base_server->timeout);
+ if (rv != APR_SUCCESS) {
+ /* expected cause is that the client disconnected already */
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, rv, c,
+ "apr_socket_timeout_set");
+ }
+
net->c = c;
net->in_ctx = NULL;
net->out_ctx = NULL;