On Fri, Nov 29, 2013 at 06:06:13PM +0800, Lei Li wrote:
> This patch adds send_pipefd() to pass the pipe file descriptor
> to destination process.
> 
> Signed-off-by: Lei Li <li...@linux.vnet.ibm.com>
> ---
>  migration-local.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 46 insertions(+), 0 deletions(-)
> 
> diff --git a/migration-local.c b/migration-local.c
> index 929ed60..f479530 100644
> --- a/migration-local.c
> +++ b/migration-local.c
> @@ -167,3 +167,49 @@ fail:
>      g_free(s);
>      return NULL;
>  }
> +
> +
> +/*
> + * Pass a pipe file descriptor to another process.
> + *
> + * Return negative value If pipefd < 0. Return 0 on
> + * success.
> + *
> + */
> +static int send_pipefd(int sockfd, int pipefd)
> +{
> +    struct msghdr msg;
> +    struct iovec iov[1];
> +    ssize_t ret;
> +    char req[1] = { 0x01 };
> +
> +    union {
> +      struct cmsghdr cm;
> +      char control[CMSG_SPACE(sizeof(int))];
> +    } control_un;
> +    struct cmsghdr *cmptr;
> +
> +    msg.msg_control = control_un.control;
> +    msg.msg_controllen = sizeof(control_un.control);
> +
> +    cmptr = CMSG_FIRSTHDR(&msg);
> +    cmptr->cmsg_len = CMSG_LEN(sizeof(int));
> +    cmptr->cmsg_level = SOL_SOCKET;
> +    cmptr->cmsg_type = SCM_RIGHTS;
> +    *((int *) CMSG_DATA(cmptr)) = pipefd;
> +
> +    msg.msg_name = NULL;
> +    msg.msg_namelen = 0;
> +
> +    iov[0].iov_base = req;
> +    iov[0].iov_len = sizeof(req);
> +    msg.msg_iov = iov;
> +    msg.msg_iovlen = 1;
> +
> +    ret = sendmsg(sockfd, &msg, 0);
> +    if (ret <= 0) {
> +        DPRINTF("sendmsg error: %s\n", strerror(errno));
> +    }
> +
> +    return ret;
> +}

There are already two copies of this function in QEMU, not to mention
several copies of code for receving FDs.

Rather than adding yet more copies of this functionality it would be
much better to add 2 methods to util/qemu-sockets.{c,h} for sending
and receiving file descriptors and update all existing code to use
them.

Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|

Reply via email to