]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/libsystemd-network/sd-dhcp-server.c
networkd: FIONREAD is not reliable on some sockets
[thirdparty/systemd.git] / src / libsystemd-network / sd-dhcp-server.c
index ad3a37b722977d68685e0e11aee95c0baea5e17d..54ff1a3f28559e11f6765e36001f2b68305b4bcf 100644 (file)
@@ -955,14 +955,13 @@ static int server_receive_message(sd_event_source *s, int fd,
                 .msg_controllen = sizeof(cmsgbuf),
         };
         struct cmsghdr *cmsg;
-        int buflen = 0, len;
+        ssize_t buflen, len;
 
         assert(server);
 
-        if (ioctl(fd, FIONREAD, &buflen) < 0)
-                return -errno;
-        else if (buflen < 0)
-                return -EIO;
+        buflen = next_datagram_size_fd(fd);
+        if (buflen < 0)
+                return buflen;
 
         message = malloc(buflen);
         if (!message)