lkml.org 
[lkml]   [2007]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCHv4 5/6] Allow setting O_NONBLOCK flag for new sockets
    This patch adds support for setting the O_NONBLOCK flag of the file
    descriptors returned by socket, socketpair, and accept.

    socket.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    --- net/socket.c
    +++ net/socket.c
    @@ -362,7 +362,7 @@ static int sock_alloc_fd(struct file **filep, int flags)
    return fd;
    }

    -static int sock_attach_fd(struct socket *sock, struct file *file)
    +static int sock_attach_fd(struct socket *sock, struct file *file, int flags)
    {
    struct dentry *dentry;
    struct qstr name = { .name = "" };
    @@ -384,7 +384,7 @@ static int sock_attach_fd(struct socket *sock, struct file *file)
    init_file(file, sock_mnt, dentry, FMODE_READ | FMODE_WRITE,
    &socket_file_ops);
    SOCK_INODE(sock)->i_fop = &socket_file_ops;
    - file->f_flags = O_RDWR;
    + file->f_flags = O_RDWR | (flags & O_NONBLOCK);
    file->f_pos = 0;
    file->private_data = sock;

    @@ -397,7 +397,7 @@ static int sock_map_fd_flags(struct socket *sock, int flags)
    int fd = sock_alloc_fd(&newfile, flags);

    if (likely(fd >= 0)) {
    - int err = sock_attach_fd(sock, newfile);
    + int err = sock_attach_fd(sock, newfile, flags);

    if (unlikely(err < 0)) {
    put_filp(newfile);
    @@ -1268,12 +1268,14 @@ asmlinkage long sys_socketpair(int family, int type, int protocol,
    goto out_release_both;
    }

    - err = sock_attach_fd(sock1, newfile1);
    + err = sock_attach_fd(sock1, newfile1,
    + INDIRECT_PARAM(file_flags, flags));
    if (unlikely(err < 0)) {
    goto out_fd2;
    }

    - err = sock_attach_fd(sock2, newfile2);
    + err = sock_attach_fd(sock2, newfile2,
    + INDIRECT_PARAM(file_flags, flags));
    if (unlikely(err < 0)) {
    fput(newfile1);
    goto out_fd1;
    @@ -1423,7 +1425,8 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr,
    goto out_put;
    }

    - err = sock_attach_fd(newsock, newfile);
    + err = sock_attach_fd(newsock, newfile,
    + INDIRECT_PARAM(file_flags, flags));
    if (err < 0)
    goto out_fd_simple;

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-11-20 07:57    [W:0.023 / U:63.340 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site