]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/libsystemd-network/sd-ndisc.c
networkd: FIONREAD is not reliable on some sockets
[thirdparty/systemd.git] / src / libsystemd-network / sd-ndisc.c
index 519d2aa36b3f0dc7f32ce98fc8844b77663c9a90..bae6a49fe6f342a8c565d87c41706fb072454a87 100644 (file)
@@ -491,19 +491,16 @@ static int ndisc_router_advertisment_recv(sd_event_source *s, int fd, uint32_t r
         struct cmsghdr *cmsg;
         struct in6_addr *gw;
         unsigned lifetime;
-        ssize_t len;
-        int r, pref, stateful, buflen = 0;
+        ssize_t len, buflen;
+        int r, pref, stateful;
 
         assert(s);
         assert(nd);
         assert(nd->event);
 
-        r = ioctl(fd, FIONREAD, &buflen);
-        if (r < 0)
-                return -errno;
-        else if (buflen < 0)
-                /* This really should not happen */
-                return -EIO;
+        buflen = next_datagram_size_fd(fd);
+        if (buflen < 0)
+                return buflen;
 
         iov.iov_len = buflen;