]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Change core connection handling so that a connection-oriented
authorJeff Trawick <trawick@apache.org>
Mon, 1 Nov 2004 13:06:51 +0000 (13:06 +0000)
committerJeff Trawick <trawick@apache.org>
Mon, 1 Nov 2004 13:06:51 +0000 (13:06 +0000)
error disabling nagle* is logged with the client IP address and
a debug log level.  We filter out not-implemented errors from
platforms which don't support TCP_NODELAY.

*This is typically EINVAL, which means that the client already
dropped the connection.

Also, mention an earlier change to include the client IP address
when logging connection-oriented errors.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@105652 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
server/core.c

diff --git a/CHANGES b/CHANGES
index 74b2ee44d0a48cefc89f462ffe9af9c377b50231..8dfd4c923262f30c32eb88336d52daaa59223693 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,12 @@ Changes with Apache 2.1.0-dev
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) Log the client IP address when an error occurs disabling nagle on a
+     connection, but log at a severity of debug since this error 
+     generally means that the connection was dropped before data was
+     sent.  Log the client IP address when reporting errors in the core
+     output filter.  [Jeff Trawick]
+
   *) Add ap_log_cerror() for logging messages associated with particular
      client connections.  [Jeff Trawick]
 
index df61a38afde9ef6def2a0e2bd814d979e306cd82..4379b68fb6b6ad751a41727ef8391256a39894f5 100644 (file)
@@ -4544,6 +4544,7 @@ static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
 static int core_pre_connection(conn_rec *c, void *csd)
 {
     core_net_rec *net = apr_palloc(c->pool, sizeof(*net));
+    apr_status_t rv;
 
 #ifdef AP_MPM_DISABLE_NAGLE_ACCEPTED_SOCK
     /* BillS says perhaps this should be moved to the MPMs. Some OSes
@@ -4551,7 +4552,21 @@ static int core_pre_connection(conn_rec *c, void *csd)
      * accept sockets which means this call only needs to be made
      * once on the listener
      */
-    ap_sock_disable_nagle(csd);
+    /* The Nagle algorithm says that we should delay sending partial
+     * packets in hopes of getting more data.  We don't want to do
+     * this; we are not telnet.  There are bad interactions between
+     * persistent connections and Nagle's algorithm that have very severe
+     * performance penalties.  (Failing to disable Nagle is not much of a
+     * problem with simple HTTP.)
+     */
+    rv = apr_socket_opt_set(csd, APR_TCP_NODELAY, 1);
+    if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) {
+        /* expected cause is that the client disconnected already,
+         * hence the debug level
+         */
+        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, rv, c,
+                      "apr_socket_opt_set(APR_TCP_NODELAY)");
+    }
 #endif
     net->c = c;
     net->in_ctx = NULL;