From: Ruediger Pluem Date: Mon, 3 Sep 2007 20:56:14 +0000 (+0000) Subject: Merge r562510 from trunk: X-Git-Tag: 2.2.6~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=934ecec00a226c4135b5fc3925bdf2895ad53c1d;p=thirdparty%2Fapache%2Fhttpd.git Merge r562510 from trunk: *) mod_proxy: Improve network performance by setting APR_TCP_NODELAY (disable Nagle algorithm) on sockets if implemented. PR 42871 [Christian BOITEL , Jim Jagielski] Submitted by: Christian BOITEL , jim Reviewed by: rpluem, jim, fielding git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@572419 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index fa875848cb1..8116c3f6af4 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,10 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.6 + *) mod_proxy: Improve network performance by setting APR_TCP_NODELAY + (disable Nagle algorithm) on sockets if implemented. + PR 42871 [Christian BOITEL , Jim Jagielski] + *) core: Do not replace a Date header set by a proxied backend server. PR 40232. [Ruediger Pluem] diff --git a/STATUS b/STATUS index e9d6407cc0f..1c0b850a146 100644 --- a/STATUS +++ b/STATUS @@ -79,14 +79,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_proxy: Improve network performance by setting APR_TCP_NODELAY - (disable Nagle algorithm) on sockets if implemented. PR 42871. - Trunk version of patch: - http://svn.apache.org/viewcvs.cgi?rev=562510&view=rev - Backport version for 2.2.x of patch: - Trunk version of patch works - +1: rpluem, jim, fielding - * mod_proxy: Ensure that at least scheme://hostname[:port] matches between worker and URL when trying to find the worker that fits best to the given URL. PR 40910. diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c index 03cb0953de2..eac6eff6297 100644 --- a/modules/proxy/mod_proxy_ftp.c +++ b/modules/proxy/mod_proxy_ftp.c @@ -1233,6 +1233,12 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker, } #endif + rv = apr_socket_opt_set(data_sock, APR_TCP_NODELAY, 1); + if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, + "apr_socket_opt_set(APR_TCP_NODELAY): Failed to set"); + } + /* make the connection */ apr_socket_addr_get(&data_addr, APR_REMOTE, sock); apr_sockaddr_ip_get(&data_ip, data_addr); @@ -1321,6 +1327,12 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker, } #endif + rv = apr_socket_opt_set(data_sock, APR_TCP_NODELAY, 1); + if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, + "apr_socket_opt_set(APR_TCP_NODELAY): Failed to set"); + } + /* make the connection */ apr_sockaddr_info_get(&pasv_addr, apr_psprintf(p, "%d.%d.%d.%d", h3, h2, h1, h0), connect_addr->family, pasvport, 0, p); rv = apr_socket_connect(data_sock, pasv_addr); diff --git a/modules/proxy/proxy_util.c b/modules/proxy/proxy_util.c index a7880af4776..30a5e49ab98 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1498,6 +1498,13 @@ PROXY_DECLARE(int) ap_proxy_connect_to_backend(apr_socket_t **newsock, } #endif + rv = apr_socket_opt_set(*newsock, APR_TCP_NODELAY, 1); + if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, + "apr_socket_opt_set(APR_TCP_NODELAY): " + "Failed to set"); + } + /* Set a timeout on the socket */ if (conf->timeout_set == 1) { apr_socket_timeout_set(*newsock, conf->timeout); @@ -2127,6 +2134,13 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function, } #endif + rv = apr_socket_opt_set(newsock, APR_TCP_NODELAY, 1); + if (rv != APR_SUCCESS && rv != APR_ENOTIMPL) { + ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, + "apr_socket_opt_set(APR_TCP_NODELAY): " + "Failed to set"); + } + /* Set a timeout on the socket */ if (worker->timeout_set == 1) { apr_socket_timeout_set(newsock, worker->timeout);