changeset 20352:ebdd1bc4dc16

lib-http: client: 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 Fri, 20 May 2016 00:04:12 +0200
parents f3e249261abd
children e424cc6aa6b9
files src/lib-http/http-client-connection.c src/lib-http/http-client.c src/lib-http/http-client.h
diffstat 3 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-http/http-client-connection.c	Fri May 20 00:02:49 2016 +0200
+++ b/src/lib-http/http-client-connection.c	Fri May 20 00:04:12 2016 +0200
@@ -1184,6 +1184,7 @@
 {
 	struct http_client_connection *conn =
 		(struct http_client_connection *)_conn;
+	const struct http_client_settings *set = &conn->client->set;
 	const char *error;
 
 	if (!success) {
@@ -1192,6 +1193,18 @@
 	} else {
 		conn->connected_timestamp = ioloop_timeval;
 		http_client_connection_debug(conn, "Connected");
+
+		if (set->socket_send_buffer_size > 0) {
+			if (net_set_send_buffer_size(_conn->fd_out,
+				set->socket_send_buffer_size) < 0)
+				i_error("net_set_send_buffer_size() failed: %m");
+		}
+		if (set->socket_recv_buffer_size > 0) {
+			if (net_set_recv_buffer_size(_conn->fd_in,
+				set->socket_recv_buffer_size) < 0)
+				i_error("net_set_recv_buffer_size() failed: %m");
+		}
+
 		if (http_client_peer_addr_is_https(&conn->peer->addr)) {
 			if (http_client_connection_ssl_init(conn, &error) < 0) {
 				http_client_peer_connection_failure(conn->peer, error);
--- a/src/lib-http/http-client.c	Fri May 20 00:02:49 2016 +0200
+++ b/src/lib-http/http-client.c	Fri May 20 00:04:12 2016 +0200
@@ -149,6 +149,8 @@
 	client->set.connect_timeout_msecs = set->connect_timeout_msecs;
 	client->set.soft_connect_timeout_msecs = set->soft_connect_timeout_msecs;
 	client->set.max_auto_retry_delay = set->max_auto_retry_delay;
+	client->set.socket_send_buffer_size = set->socket_send_buffer_size;
+	client->set.socket_recv_buffer_size = set->socket_recv_buffer_size;
 	client->set.debug = set->debug;
 
 	i_array_init(&client->delayed_failing_requests, 1);
--- a/src/lib-http/http-client.h	Fri May 20 00:02:49 2016 +0200
+++ b/src/lib-http/http-client.h	Fri May 20 00:04:12 2016 +0200
@@ -126,6 +126,13 @@
 	   is not automatically retried and the response is returned */
 	unsigned int max_auto_retry_delay;
 
+	/* 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;
+
+	/* enable logging debug messages */
 	bool debug;
 };