From: Dmitry V. Levin Date: Wed, 27 Jan 2016 21:35:50 +0000 (+0000) Subject: receive_responses: avoid potential hangup X-Git-Tag: v4.12~609 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2215c3e352cc3ec16326bb8f50a7570e266207ae;p=strace receive_responses: avoid potential hangup * socketutils.c (receive_responses): Pass MSG_DONTWAIT to recvmsg after the first recvmsg call to avoid potential hangup. --- diff --git a/socketutils.c b/socketutils.c index 67fc1ee7..62253044 100644 --- a/socketutils.c +++ b/socketutils.c @@ -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; } }