]> git.ipfire.org Git - fireperf.git/commitdiff
Enable ZEROCOPY master
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Oct 2021 18:15:33 +0000 (18:15 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 20 Oct 2021 18:15:33 +0000 (18:15 +0000)
https://www.kernel.org/doc/html/latest/networking/msg_zerocopy.html

Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/main.c
src/server.c

index 3af95bcabc4db68d3df4b40f3d62686c1825b27b..1d996cd01b0820bbff63286b1ddbd6970f4b9cec 100644 (file)
@@ -459,7 +459,7 @@ int handle_connection_send(struct fireperf_config* conf,
        }
 
        do {
-               bytes_sent = send(fd, buffer, SOCKET_SEND_BUFFER_SIZE, 0);
+               bytes_sent = send(fd, buffer, SOCKET_SEND_BUFFER_SIZE, MSG_ZEROCOPY);
        } while (bytes_sent < 0 && (errno == EAGAIN || errno == EWOULDBLOCK));
 
        // Update statistics
index e332b2d6a90ce14433db1f009c2f0225be92653b..19cc345d5debd5aa2146eb0e74749747b8e99534 100644 (file)
@@ -102,6 +102,14 @@ static int create_socket(struct fireperf_config* conf, int i) {
                goto ERROR;
        }
 
+       // Enable zero-copy
+       r = setsockopt(fd, SOL_SOCKET, SO_ZEROCOPY, &flags, sizeof(flags));
+       if (r) {
+               ERROR(conf, "Could not set SO_ZEROCOPY on socket %d: %s\n",
+                       fd, strerror(errno));
+               goto ERROR;
+       }
+
        // Set socket buffer sizes
        r = set_socket_buffer_sizes(conf, fd);
        if (r)