]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-http: client: Added settings to configure the connection's socket kernel buffer...
authorStephan Bosch <stephan@dovecot.fi>
Thu, 19 May 2016 22:04:12 +0000 (00:04 +0200)
committerStephan Bosch <stephan@dovecot.fi>
Thu, 26 May 2016 01:05:44 +0000 (03:05 +0200)
This is mainly useful for use in the lib-http test suite.

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

index ada387c2d6e9169f9d10ada6354c25834588bc5b..d2000453b96cf717eb2df8d33414ef78b6dfa9cd 100644 (file)
@@ -1184,6 +1184,7 @@ http_client_connection_connected(struct connection *_conn, bool success)
 {
        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 @@ http_client_connection_connected(struct connection *_conn, bool success)
        } 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);
index a97aea4886cddfc4641102648fdf6a4c1dcc49fb..ec1cba878ecaef0aaa7619f0e4c919ed026ea190 100644 (file)
@@ -145,6 +145,8 @@ struct http_client *http_client_init(const struct http_client_settings *set)
        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);
index 4a58d838166cfa05aef6948cda0ba6d15be74611..51a7097191126e1b4a14edd1b01f6e5f7a3a68cd 100644 (file)
@@ -109,6 +109,12 @@ struct http_client_settings {
           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;
 };