diff options
| -rw-r--r-- | include/linux/socket.h | 1 | ||||
| -rw-r--r-- | net/socket.c | 4 | 
2 files changed, 5 insertions, 0 deletions
diff --git a/include/linux/socket.h b/include/linux/socket.h index 7b3aae2052a..354cc5617f8 100644 --- a/include/linux/socket.h +++ b/include/linux/socket.h @@ -255,6 +255,7 @@ struct ucred {  #define MSG_ERRQUEUE	0x2000	/* Fetch message from error queue */  #define MSG_NOSIGNAL	0x4000	/* Do not generate SIGPIPE */  #define MSG_MORE	0x8000	/* Sender will send more */ +#define MSG_WAITFORONE	0x10000	/* recvmmsg(): block until 1+ packets avail */  #define MSG_EOF         MSG_FIN diff --git a/net/socket.c b/net/socket.c index 769c386bd42..f55ffe9f8c8 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2135,6 +2135,10 @@ int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,  			break;  		++datagrams; +		/* MSG_WAITFORONE turns on MSG_DONTWAIT after one packet */ +		if (flags & MSG_WAITFORONE) +			flags |= MSG_DONTWAIT; +  		if (timeout) {  			ktime_get_ts(timeout);  			*timeout = timespec_sub(end_time, *timeout);  |