From: Stephan Bosch Date: Sun, 19 Jun 2016 23:25:02 +0000 (+0200) Subject: lib-http: server: Added settings to configure the connection's socket kernel buffer... X-Git-Tag: 2.2.25.rc1~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=183ca5c9e1ab5ee712ef6700021d3c1d18ab7f8c;p=thirdparty%2Fdovecot%2Fcore.git lib-http: server: Added settings to configure the connection's socket kernel buffer sizes. This is mainly useful for use in the lib-http test suite. --- diff --git a/src/lib-http/http-server-connection.c b/src/lib-http/http-server-connection.c index daf3e22638..0b7b8c84af 100644 --- a/src/lib-http/http-server-connection.c +++ b/src/lib-http/http-server-connection.c @@ -1011,6 +1011,7 @@ http_server_connection_create(struct http_server *server, int fd_in, int fd_out, bool ssl, const struct http_server_callbacks *callbacks, void *context) { + const struct http_server_settings *set = &server->set; struct http_server_connection *conn; static unsigned int id = 0; struct ip_addr addr; @@ -1029,6 +1030,19 @@ http_server_connection_create(struct http_server *server, if (fd_in != fd_out) net_set_nonblock(fd_out, TRUE); + if (set->socket_send_buffer_size > 0) { + if (net_set_send_buffer_size(fd_out, + set->socket_send_buffer_size) < 0) + i_error("net_set_send_buffer_size(%"PRIuSIZE_T") failed: %m", + set->socket_send_buffer_size); + } + if (set->socket_recv_buffer_size > 0) { + if (net_set_recv_buffer_size(fd_in, + set->socket_recv_buffer_size) < 0) + i_error("net_set_recv_buffer_size(%"PRIuSIZE_T") failed: %m", + set->socket_recv_buffer_size); + } + /* get a name for this connection */ if (fd_in != fd_out || net_getpeername(fd_in, &addr, &port) < 0) { name = t_strdup_printf("[%u]", id); diff --git a/src/lib-http/http-server.c b/src/lib-http/http-server.c index 7f9f28df4f..8a3d4a9975 100644 --- a/src/lib-http/http-server.c +++ b/src/lib-http/http-server.c @@ -34,6 +34,8 @@ struct http_server *http_server_init(const struct http_server_settings *set) server->set.max_pipelined_requests = (set->max_pipelined_requests > 0 ? set->max_pipelined_requests : 1); server->set.request_limits = set->request_limits; + server->set.socket_send_buffer_size = set->socket_send_buffer_size; + server->set.socket_recv_buffer_size = set->socket_recv_buffer_size; server->set.debug = set->debug; server->conn_list = http_server_connection_list_init(); diff --git a/src/lib-http/http-server.h b/src/lib-http/http-server.h index b90a396731..5d87f0fcdd 100644 --- a/src/lib-http/http-server.h +++ b/src/lib-http/http-server.h @@ -24,6 +24,12 @@ struct http_server_settings { /* request limits */ struct http_request_limits request_limits; + /* the kernel send/receive buffer sizes used for the connection sockets. + Configuring this is mainly useful for the test suite. The kernel + defaults are used when these settings are 0. */ + size_t socket_send_buffer_size; + size_t socket_recv_buffer_size; + bool debug; };