diff options
author | Justin Erenkrantz <jerenkrantz@apache.org> | 2005-03-15 20:04:58 +0000 |
---|---|---|
committer | Justin Erenkrantz <jerenkrantz@apache.org> | 2005-03-15 20:04:58 +0000 |
commit | a80f8410bddb01e733c8fd0ed60266800088d5d9 (patch) | |
tree | ad8e9e9db46ea04df692cc00adea0eea05346e1c /server/listen.c | |
parent | 8bc56b5d297ad32a4c6c12b8ee5ea09858281ee7 (diff) | |
download | httpd-a80f8410bddb01e733c8fd0ed60266800088d5d9.tar.gz |
Add ReceiveBufferSize directive to control the TCP receive buffer.
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
Diffstat (limited to 'server/listen.c')
-rw-r--r-- | server/listen.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/server/listen.c b/server/listen.c index b5b4490a93..6a17e43dd8 100644 --- a/server/listen.c +++ b/server/listen.c @@ -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; +} |