lkml.org 
[lkml]   [2010]   [Mar]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v2] Add MSG_WAITFORONE flag to recvmmsg

    From: Brandon L Black <blblack@gmail.com>

    Add new flag MSG_WAITFORONE for the recvmmsg() syscall.
    When this flag is specified for a blocking socket, recvmmsg()
    will only block until at least 1 packet is available. The
    default behavior is to block until all vlen packets are
    available. This flag has no effect on non-blocking sockets
    or when used in combination with MSG_DONTWAIT.

    Signed-off-by: Brandon L Black <blblack@gmail.com>

    ---
    diff --git a/include/linux/socket.h b/include/linux/socket.h
    index 7b3aae2..354cc56 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 769c386..f55ffe9 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);

    \
     
     \ /
      Last update: 2010-03-27 03:21    [W:0.023 / U:61.176 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site