From: Michael Tremer Date: Mon, 22 Feb 2021 19:34:14 +0000 (+0000) Subject: Set socket buffer sizes on both sides for duplex traffic X-Git-Tag: 0.2.0~9 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2bc2518f5ec024d911358305bf0747a81630ff79;p=fireperf.git Set socket buffer sizes on both sides for duplex traffic Signed-off-by: Michael Tremer --- diff --git a/src/client.c b/src/client.c index aae4b8e..d25f617 100644 --- a/src/client.c +++ b/src/client.c @@ -64,24 +64,20 @@ static int open_connection(struct fireperf_config* conf) { .sin6_port = htons(port), }; + // Set socket buffer sizes + int r = set_socket_buffer_sizes(conf, fd); + if (r) + goto ERROR; + // Enable keepalive int flags = 1; - int r = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&flags, sizeof(flags)); + r = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&flags, sizeof(flags)); if (r) { ERROR(conf, "Could not set SO_KEEPALIVE on socket %d: %s\n", fd, strerror(errno)); goto ERROR; } - // 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)); - goto ERROR; - } - // Set keepalive interval if (conf->keepalive_interval) { DEBUG(conf, "Setting keepalive interval to %d\n", conf->keepalive_interval); diff --git a/src/main.c b/src/main.c index 532a168..db41642 100644 --- a/src/main.c +++ b/src/main.c @@ -413,6 +413,30 @@ int fireperf_dump_stats(struct fireperf_config* conf, struct fireperf_stats* sta return 0; } +int set_socket_buffer_sizes(struct fireperf_config* conf, int fd) { + int r; + + // Set socket buffer sizes + int 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 receive buffer size + 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)); + return 1; + } + + return 0; +} + int handle_connection_send(struct fireperf_config* conf, struct fireperf_stats* stats, int fd) { const char* buffer = ZERO; diff --git a/src/main.h b/src/main.h index 890860e..f0e8b1a 100644 --- a/src/main.h +++ b/src/main.h @@ -85,6 +85,8 @@ struct fireperf_stats { int fireperf_dump_stats(struct fireperf_config* conf, struct fireperf_stats* stats, int mode); +int set_socket_buffer_sizes(struct fireperf_config* conf, int fd); + int handle_connection_send(struct fireperf_config* conf, struct fireperf_stats* stats, int fd); int handle_connection_recv(struct fireperf_config* conf, diff --git a/src/server.c b/src/server.c index 6b21f5d..9be816d 100644 --- a/src/server.c +++ b/src/server.c @@ -51,14 +51,10 @@ static int create_socket(struct fireperf_config* conf, int i) { goto ERROR; } - // Set receive buffer size - 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)); + // Set socket buffer sizes + r = set_socket_buffer_sizes(conf, fd); + if (r) goto ERROR; - } struct sockaddr_in6 addr = { .sin6_family = AF_INET6,