]> git.ipfire.org Git - fireperf.git/commitdiff
Set socket buffer sizes on both sides for duplex traffic
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 22 Feb 2021 19:34:14 +0000 (19:34 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 22 Feb 2021 19:34:14 +0000 (19:34 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/client.c
src/main.c
src/main.h
src/server.c

index aae4b8e22d1af7fc3cd3eaa6eb47a7d2c83a4fe5..d25f617175b0d90b1f6dcd42bd158b88182403fa 100644 (file)
@@ -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);
index 532a168672d2f5e96471d7ead65b0930d4727d8a..db41642113d7ac0fe5eef83b50e607a15a0aa8af 100644 (file)
@@ -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;
index 890860e5a7688eeb0a8a78be287946e4a5b9978c..f0e8b1abd49d0d868997f71f115b283d4519dca7 100644 (file)
@@ -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,
index 6b21f5d274dfd0f550119811964d28caf21b90be..9be816dfff9d733e7ff8f3cae97e40a3da8e158f 100644 (file)
@@ -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,