]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: server: Added settings to configure the connection's socket kernel buffer...
authorStephan Bosch <stephan@dovecot.fi>
Sun, 19 Jun 2016 23:25:02 +0000 (01:25 +0200)
committerStephan Bosch <stephan@dovecot.fi>
Mon, 20 Jun 2016 00:31:23 +0000 (02:31 +0200)
This is mainly useful for use in the lib-http test suite.

src/lib-http/http-server-connection.c
src/lib-http/http-server.c
src/lib-http/http-server.h

index 553936094b9a06ee078777b8819fe3dea67a8f23..de5e224d18b488d5839ddedb1c7d250fa8dc2bed 100644 (file)
@@ -1039,6 +1039,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;
@@ -1060,6 +1061,19 @@ http_server_connection_create(struct http_server *server,
                net_set_nonblock(fd_out, TRUE);
        (void)net_set_tcp_nodelay(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);
index f036d3326f2e4330ddbc512468fbd41e02e9a89f..0e68994523c0460fede5db7b0b7ab4a72495a70f 100644 (file)
@@ -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();
index 53ec3ac521693da294e436c7040d9e1a5e199094..3744dc6662797fc287f591c0a748e4ae3ca120de 100644 (file)
@@ -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;
 };