From: Jim Jagielski Date: Fri, 3 Aug 2007 15:57:27 +0000 (+0000) Subject: *) mod_proxy: Improve network performance by setting APR_TCP_NODELAY X-Git-Tag: 2.3.0~1645 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d7e5be074a5745e11d4a02f15147e694ba5b03de;p=apache *) mod_proxy: Improve network performance by setting APR_TCP_NODELAY (disable Nagle algorithm) on sockets if implemented. PR 42871 [Christian BOITEL , Jim Jagielski] git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@562510 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index bdc33a483a..8caf79e509 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,10 @@ Changes with Apache 2.3.0 [Remove entries to the current 2.0 and 2.2 section below, when backported] + *) mod_proxy: Improve network performance by setting APR_TCP_NODELAY + (disable Nagle algorithm) on sockets if implemented. + PR 42871 [Christian BOITEL , Jim Jagielski] + *) mod_info: mod_info outputs invalid XHTML 1.0 transitional. PR 42847 [Rici Lake ] diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c index c26ccb5803..b5d3e6b4bc 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 bd41cdcd5a..e35b9cdc35 100644 --- a/modules/proxy/proxy_util.c +++ b/modules/proxy/proxy_util.c @@ -1530,6 +1530,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); @@ -2157,6 +2164,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);