changeset 20370:142b1aac8bea

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.
author Stephan Bosch <stephan@dovecot.fi>
date Mon, 20 Jun 2016 01:25:02 +0200
parents 5b16f43fcb3b
children eae726541234
files src/lib-http/http-server-connection.c src/lib-http/http-server.c src/lib-http/http-server.h
diffstat 3 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-http/http-server-connection.c	Mon Jun 20 01:20:33 2016 +0200
+++ b/src/lib-http/http-server-connection.c	Mon Jun 20 01:25:02 2016 +0200
@@ -1011,6 +1011,7 @@
 	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 @@
 	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);
--- a/src/lib-http/http-server.c	Mon Jun 20 01:20:33 2016 +0200
+++ b/src/lib-http/http-server.c	Mon Jun 20 01:25:02 2016 +0200
@@ -34,6 +34,8 @@
 	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();
--- a/src/lib-http/http-server.h	Mon Jun 20 01:20:33 2016 +0200
+++ b/src/lib-http/http-server.h	Mon Jun 20 01:25:02 2016 +0200
@@ -24,6 +24,12 @@
 	/* 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;
 };