Commit 2af2bf67 authored by Gerd Hoffmann's avatar Gerd Hoffmann Committed by Anthony Liguori
Browse files

sockets: add unix_connect_opts



Add unix_connect_opts().  Does the same as unix_connect(), but uses
QemuOpts.  unix_connect() is a compatibility wrapper for
unix_connect_opts() now and should go away some day.

Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 7d31544f
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -29,6 +29,19 @@
static int sockets_debug = 0;
static const int on=1, off=0;

/* used temporarely until all users are converted to QemuOpts */
QemuOptsList dummy_opts = {
    .name = "dummy",
    .head = TAILQ_HEAD_INITIALIZER(dummy_opts.head),
    .desc = {
        {
            .name = "path",
            .type = QEMU_OPT_STRING,
        },
        { /* end if list */ }
    },
};

static int inet_getport(struct addrinfo *e)
{
    struct sockaddr_in *i4;
@@ -376,11 +389,17 @@ err:
    return -1;
}

int unix_connect(const char *path)
int unix_connect_opts(QemuOpts *opts)
{
    struct sockaddr_un un;
    const char *path = qemu_opt_get(opts, "path");
    int sock;

    if (NULL == path) {
        fprintf(stderr, "unix connect: no path specified\n");
        return -1;
    }

    sock = socket(PF_UNIX, SOCK_STREAM, 0);
    if (sock < 0) {
        perror("socket(unix)");
@@ -400,6 +419,19 @@ int unix_connect(const char *path)
    return sock;
}

/* compatibility wrapper */
int unix_connect(const char *path)
{
    QemuOpts *opts;
    int sock;

    opts = qemu_opts_create(&dummy_opts, NULL, 0);
    qemu_opt_set(opts, "path", path);
    sock = unix_connect_opts(opts);
    qemu_opts_del(opts);
    return sock;
}

#else

int unix_listen(const char *path, char *ostr, int olen)
+3 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ int inet_aton(const char *cp, struct in_addr *ia);

#endif /* !_WIN32 */

#include "qemu-option.h"

/* misc helpers */
void socket_set_nonblock(int fd);
int send_all(int fd, const void *buf, int len1);
@@ -39,6 +41,7 @@ int inet_listen(const char *str, char *ostr, int olen,
int inet_connect(const char *str, int socktype);

int unix_listen(const char *path, char *ostr, int olen);
int unix_connect_opts(QemuOpts *opts);
int unix_connect(const char *path);

/* Old, ipv4 only bits.  Don't use for new code. */