From 0e173e1c7ac73acc2c3cb8aadba1e8fa4fae3cb8 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 1 Feb 2021 16:10:01 +0000 Subject: [PATCH] client+server: Configure socket send/receive buffer size Signed-off-by: Michael Tremer --- src/client.c | 10 ++++++++++ src/main.h | 5 +++++ src/server.c | 13 ++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/client.c b/src/client.c index 3700c88..af39cd0 100644 --- a/src/client.c +++ b/src/client.c @@ -61,6 +61,15 @@ static int connect_socket(struct fireperf_config* conf, int fd) { return 1; } + // Set socket buffer sizes + flags = SOCKET_SEND_BUFFER_SIZE; + r = setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (void*)&flags, sizeof(flags)); + if (r) { + ERROR(conf, "Could not set send buffer size on socket %d: %s\n", + fd, strerror(errno)); + return 1; + } + // Set keepalive interval if (conf->keepalive_interval) { DEBUG(conf, "Setting keepalive interval to %d\n", conf->keepalive_interval); @@ -75,6 +84,7 @@ static int connect_socket(struct fireperf_config* conf, int fd) { DEBUG(conf, "Setting keepalive idle interval to %d\n", conf->keepalive_interval); + flags = 1; r = setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, (void*)&flags, sizeof(flags)); if (r) { diff --git a/src/main.h b/src/main.h index de8654b..42959eb 100644 --- a/src/main.h +++ b/src/main.h @@ -35,6 +35,11 @@ // Set the size of the read/write buffer to 1 MiB #define BUFFER_SIZE 1048576 +// Socket buffer configuration +#define SOCKET_BUFFER_SIZE (64 * 1024) +#define SOCKET_RECV_BUFFER_SIZE SOCKET_BUFFER_SIZE +#define SOCKET_SEND_BUFFER_SIZE SOCKET_BUFFER_SIZE + #define EPOLL_MAX_EVENTS 128 struct fireperf_config { diff --git a/src/server.c b/src/server.c index 0dbce22..21be19d 100644 --- a/src/server.c +++ b/src/server.c @@ -167,6 +167,8 @@ static int dump_stats(struct fireperf_config* conf, struct fireperf_server_stats } static int create_socket(struct fireperf_config* conf) { + int r; + // Open a new socket int fd = socket(AF_INET6, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0); if (fd < 0) { @@ -174,13 +176,22 @@ static int create_socket(struct fireperf_config* conf) { goto ERROR; } + // Set receive buffer size + int flags = SOCKET_RECV_BUFFER_SIZE; + r = setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (void*)&flags, sizeof(flags)); + if (r) { + ERROR(conf, "Could not set receive buffer size on socket %d: %s\n", + fd, strerror(errno)); + goto ERROR; + } + struct sockaddr_in6 addr = { .sin6_family = AF_INET6, .sin6_port = htons(conf->port), }; // Bind it to the selected port - int r = bind(fd, &addr, sizeof(addr)); + r = bind(fd, &addr, sizeof(addr)); if (r) { ERROR(conf, "Could not bind socket: %s\n", strerror(errno)); goto ERROR; -- 2.47.2