]> granicus.if.org Git - strace/commitdiff
receive_responses: avoid potential hangup
authorDmitry V. Levin <ldv@altlinux.org>
Wed, 27 Jan 2016 21:35:50 +0000 (21:35 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 3 Feb 2016 12:42:20 +0000 (12:42 +0000)
* socketutils.c (receive_responses): Pass MSG_DONTWAIT to recvmsg after
the first recvmsg call to avoid potential hangup.

socketutils.c

index 67fc1ee7fad4f80ce81f95f9c90f7a8e048cb8f2..62253044ea45e315b6cf52d8480901c06635e632 100644 (file)
@@ -150,6 +150,7 @@ receive_responses(const int fd, const unsigned long inode,
                .iov_base = buf,
                .iov_len = sizeof(buf)
        };
+       int flags = 0;
 
        for (;;) {
                ssize_t ret;
@@ -161,7 +162,7 @@ receive_responses(const int fd, const unsigned long inode,
                        .msg_iovlen = 1
                };
 
-               ret = recvmsg(fd, &msg, 0);
+               ret = recvmsg(fd, &msg, flags);
                if (ret < 0) {
                        if (errno == EINTR)
                                continue;
@@ -180,6 +181,7 @@ receive_responses(const int fd, const unsigned long inode,
                        if (parser(proto_name, NLMSG_DATA(h), h->nlmsg_len, inode))
                                return true;
                }
+               flags = MSG_DONTWAIT;
        }
 }