net.c: don't tune SO_RCVLOWAT master
authorSimon Guinot <simon.guinot@sequanux.org>
Sat, 23 Nov 2019 12:01:39 +0000 (13:01 +0100)
committerSimon Guinot <simon.guinot@sequanux.org>
Sat, 23 Nov 2019 12:01:39 +0000 (13:01 +0100)
Sometimes the netsum server is blocked waiting for control messages
while it has been sent by the client.

It is because SO_RCVLOWAT is tuned to message size (ctrl->size). Since
the control message size is only 13 bytes, then recvfrom() blocks on
control message waiting for more bytes or a timeout.

This patch fixes the issue by letting SO_RCVLOWAT to its default value
(1). Since the {recv,send}_message functions are able to deal with
incomplete messages, then it should work just fine.

net.c

diff --git a/net.c b/net.c
index 217a852..fbe410e 100644 (file)
--- a/net.c
+++ b/net.c
@@ -123,12 +123,6 @@ static int open_socket(time_t timeout, size_t recvlowat)
                        strerror(errno));
                goto err_close_sock;
        }
-       if (setsockopt(sock, SOL_SOCKET, SO_RCVLOWAT,
-                       &recvlowat, sizeof(recvlowat)) == -1) {
-               fprintf(stderr, "setsockopt() SO_RCVLOWAT failed: %s\n",
-                       strerror(errno));
-               goto err_close_sock;
-       }
        if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)) == -1) {
                fprintf(stderr, "setsockopt() SO_RCVTIMEOUT failed: %s\n",
                        strerror(errno));