[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]
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
* 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;