]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Add ReceiveBufferSize directive to control the TCP receive buffer.
authorJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 15 Mar 2005 20:04:58 +0000 (20:04 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 15 Mar 2005 20:04:58 +0000 (20:04 +0000)
Submitted by: Eric Covener <covener gmail.com>
Reviewed by:  Justin Erenkrantz (with minor formatting tweaks)

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

CHANGES
include/ap_listen.h
server/listen.c

diff --git a/CHANGES b/CHANGES
index 8b6b46e86d55253ff90599bcb7e383870026e1e9..cdfa2b53ea5ca381137002c46ac1c182d0afa578 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@ Changes with Apache 2.1.4
 
   [Remove entries to the current 2.0 section below, when backported]
 
+  *) Add ReceiveBufferSize directive to control the TCP receive buffer.
+     [Eric Covener <covener gmail.com>]
+
   *) mod_proxy: Add proxy-sendextracrlf option to send an extra CRLF at the
      end of the request body to work with really old HTTP servers.
      [Justin Erenkrantz]
@@ -9,7 +12,7 @@ Changes with Apache 2.1.4
   *) util_ldap: Keep track of the number of attributes retrieved from 
      LDAP so that all the values can be properly cached even if the 
      value is NULL. PR 33901 [Brad Nicholes]
-  
+
   *) mod_cache: Fix error where incoming Cache-Control would be ignored.
      [Justin Erenkrantz]
 
index bdcea6a53dc052c167c61f365e1b5a06984441ee..312e87fb63b370d145a6c835358bd6850a55d81d 100644 (file)
@@ -88,6 +88,9 @@ AP_DECLARE_NONSTD(const char *) ap_set_listenbacklog(cmd_parms *cmd, void *dummy
 AP_DECLARE_NONSTD(const char *) ap_set_listener(cmd_parms *cmd, void *dummy, const char *ips);
 AP_DECLARE_NONSTD(const char *) ap_set_send_buffer_size(cmd_parms *cmd, void *dummy,
                                    const char *arg);
+AP_DECLARE_NONSTD(const char *) ap_set_receive_buffer_size(cmd_parms *cmd,
+                                                           void *dummy,
+                                                           const char *arg);
 
 #define LISTEN_COMMANDS        \
 AP_INIT_TAKE1("ListenBacklog", ap_set_listenbacklog, NULL, RSRC_CONF, \
@@ -95,6 +98,8 @@ AP_INIT_TAKE1("ListenBacklog", ap_set_listenbacklog, NULL, RSRC_CONF, \
 AP_INIT_TAKE1("Listen", ap_set_listener, NULL, RSRC_CONF, \
   "A port number or a numeric IP address and a port number"), \
 AP_INIT_TAKE1("SendBufferSize", ap_set_send_buffer_size, NULL, RSRC_CONF, \
-  "Send buffer size in bytes")
+  "Send buffer size in bytes"), \
+AP_INIT_TAKE1("ReceiveBufferSize", ap_set_receive_buffer_size, NULL, \
+              RSRC_CONF, "Receive buffer size in bytes")
 
 #endif
index b5b4490a93ce09dfac392172d52019fbaaad204e..6a17e43dd84c03c5f9bb4997cfff3eb87b183e1f 100644 (file)
@@ -34,6 +34,7 @@ AP_DECLARE_DATA ap_listen_rec *ap_listeners = NULL;
 static ap_listen_rec *old_listeners;
 static int ap_listenbacklog;
 static int send_buffer_size;
+static int receive_buffer_size;
 
 /* TODO: make_sock is just begging and screaming for APR abstraction */
 static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
@@ -112,6 +113,17 @@ static apr_status_t make_sock(apr_pool_t *p, ap_listen_rec *server)
             /* not a fatal error */
         }
     }
+    if (receive_buffer_size) {
+        stat = apr_socket_opt_set(s, APR_SO_RCVBUF, receive_buffer_size);
+        if (stat != APR_SUCCESS && stat != APR_ENOTIMPL) {
+            ap_log_perror(APLOG_MARK, APLOG_WARNING, stat, p,
+                          "make_sock: failed to set ReceiveBufferSize for "
+                          "address %pI, using default",
+                          server->bind_addr);
+            strerror(errno);
+            /* not a fatal error */
+        }
+    }
 
 #if APR_TCP_NODELAY_INHERITED
     ap_sock_disable_nagle(s);
@@ -534,3 +546,22 @@ AP_DECLARE_NONSTD(const char *) ap_set_send_buffer_size(cmd_parms *cmd,
     send_buffer_size = s;
     return NULL;
 }
+
+AP_DECLARE_NONSTD(const char *) ap_set_receive_buffer_size(cmd_parms *cmd,
+                                                           void *dummy,
+                                                           const char *arg)
+{
+    int s = atoi(arg);
+    const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
+
+    if (err != NULL) {
+        return err;
+    }
+
+    if (s < 512 && s != 0) {
+        return "ReceiveBufferSize must be >= 512 bytes, or 0 for system default.";
+    }
+
+    receive_buffer_size = s;
+    return NULL;
+}