]> git.ipfire.org Git - fireperf.git/commitdiff
client+server: Configure socket send/receive buffer size
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 1 Feb 2021 16:10:01 +0000 (16:10 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 1 Feb 2021 16:10:01 +0000 (16:10 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/client.c
src/main.h
src/server.c

index 3700c88845b4c49f2db13b85ae330c97ca2bcaf4..af39cd02b5af394ab369631fedefd249290fe9de 100644 (file)
@@ -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) {
index de8654b1217a68d9fa16e9187a9cc014bcda100d..42959eb669ce6e46e4f3a8834398629654db91ae 100644 (file)
 // 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 {
index 0dbce224d7f76b75a974a893c03a7f4e13fe5825..21be19da5bcac3e0209f1d68f89d348f3a0b7656 100644 (file)
@@ -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;