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;
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);
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();
/* 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;
};