int inet_dgram_opts(QemuOpts *opts)

{

    struct addrinfo ai, *peer = NULL, *local = NULL;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock = -1, rc;



    /* lookup peer addr */

    memset(&ai,0, sizeof(ai));

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_DGRAM;



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    if (addr == NULL || strlen(addr) == 0) {

        addr = "localhost";

    }

    if (port == NULL || strlen(port) == 0) {

        fprintf(stderr, "inet_dgram: port not specified\n");

        return -1;

    }



    if (qemu_opt_get_bool(opts, "ipv4", 0))

        ai.ai_family = PF_INET;

    if (qemu_opt_get_bool(opts, "ipv6", 0))

        ai.ai_family = PF_INET6;



    if (0 != (rc = getaddrinfo(addr, port, &ai, &peer))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", addr, port,

                gai_strerror(rc));

	return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: peer (%s:%s)\n", __FUNCTION__, addr, port);

        inet_print_addrinfo(__FUNCTION__, peer);

    }



    /* lookup local addr */

    memset(&ai,0, sizeof(ai));

    ai.ai_flags = AI_PASSIVE;

    ai.ai_family = peer->ai_family;

    ai.ai_socktype = SOCK_DGRAM;



    addr = qemu_opt_get(opts, "localaddr");

    port = qemu_opt_get(opts, "localport");

    if (addr == NULL || strlen(addr) == 0) {

        addr = NULL;

    }

    if (!port || strlen(port) == 0)

        port = "0";



    if (0 != (rc = getaddrinfo(addr, port, &ai, &local))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", addr, port,

                gai_strerror(rc));

        return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: local (%s:%s)\n", __FUNCTION__, addr, port);

        inet_print_addrinfo(__FUNCTION__, local);

    }



    /* create socket */

    sock = socket(peer->ai_family, peer->ai_socktype, peer->ai_protocol);

    if (sock < 0) {

        fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,

                inet_strfamily(peer->ai_family), strerror(errno));

        goto err;

    }

    setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on));



    /* bind socket */

    if (getnameinfo((struct sockaddr*)local->ai_addr,local->ai_addrlen,

                    uaddr,INET6_ADDRSTRLEN,uport,32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (bind(sock, local->ai_addr, local->ai_addrlen) < 0) {

        fprintf(stderr,"%s: bind(%s,%s,%d): OK\n", __FUNCTION__,

                inet_strfamily(local->ai_family), uaddr, inet_getport(local));

        goto err;

    }



    /* connect to peer */

    if (getnameinfo((struct sockaddr*)peer->ai_addr, peer->ai_addrlen,

                    uaddr, INET6_ADDRSTRLEN, uport, 32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (connect(sock,peer->ai_addr,peer->ai_addrlen) < 0) {

        fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,

                inet_strfamily(peer->ai_family),

                peer->ai_canonname, uaddr, uport, strerror(errno));

        goto err;

    }



    freeaddrinfo(local);

    freeaddrinfo(peer);

    return sock;



err:

    if (-1 != sock)

        closesocket(sock);

    if (local)

        freeaddrinfo(local);

    if (peer)

        freeaddrinfo(peer);

    return -1;

}

int inet_dgram_opts(QemuOpts *opts)

{

    struct addrinfo ai, *peer = NULL, *local = NULL;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock = -1, rc;



    

    memset(&ai,0, sizeof(ai));

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_DGRAM;



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    if (addr == NULL || strlen(addr) == 0) {

        addr = "localhost";

    }

    if (port == NULL || strlen(port) == 0) {

        fprintf(stderr, "inet_dgram: port not specified\n");

        return -1;

    }



    if (qemu_opt_get_bool(opts, "ipv4", 0))

        ai.ai_family = PF_INET;

    if (qemu_opt_get_bool(opts, "ipv6", 0))

        ai.ai_family = PF_INET6;



    if (0 != (rc = getaddrinfo(addr, port, &ai, &peer))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", addr, port,

                gai_strerror(rc));

	return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: peer (%s:%s)\n", __FUNCTION__, addr, port);

        inet_print_addrinfo(__FUNCTION__, peer);

    }



    

    memset(&ai,0, sizeof(ai));

    ai.ai_flags = AI_PASSIVE;

    ai.ai_family = peer->ai_family;

    ai.ai_socktype = SOCK_DGRAM;



    addr = qemu_opt_get(opts, "localaddr");

    port = qemu_opt_get(opts, "localport");

    if (addr == NULL || strlen(addr) == 0) {

        addr = NULL;

    }

    if (!port || strlen(port) == 0)

        port = "0";



    if (0 != (rc = getaddrinfo(addr, port, &ai, &local))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", addr, port,

                gai_strerror(rc));

        return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: local (%s:%s)\n", __FUNCTION__, addr, port);

        inet_print_addrinfo(__FUNCTION__, local);

    }



    

    sock = socket(peer->ai_family, peer->ai_socktype, peer->ai_protocol);

    if (sock < 0) {

        fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,

                inet_strfamily(peer->ai_family), strerror(errno));

        goto err;

    }

    setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on));



    

    if (getnameinfo((struct sockaddr*)local->ai_addr,local->ai_addrlen,

                    uaddr,INET6_ADDRSTRLEN,uport,32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (bind(sock, local->ai_addr, local->ai_addrlen) < 0) {

        fprintf(stderr,"%s: bind(%s,%s,%d): OK\n", __FUNCTION__,

                inet_strfamily(local->ai_family), uaddr, inet_getport(local));

        goto err;

    }



    

    if (getnameinfo((struct sockaddr*)peer->ai_addr, peer->ai_addrlen,

                    uaddr, INET6_ADDRSTRLEN, uport, 32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (connect(sock,peer->ai_addr,peer->ai_addrlen) < 0) {

        fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,

                inet_strfamily(peer->ai_family),

                peer->ai_canonname, uaddr, uport, strerror(errno));

        goto err;

    }



    freeaddrinfo(local);

    freeaddrinfo(peer);

    return sock;



err:

    if (-1 != sock)

        closesocket(sock);

    if (local)

        freeaddrinfo(local);

    if (peer)

        freeaddrinfo(peer);

    return -1;

}

    sock = socket(peer->ai_family, peer->ai_socktype, peer->ai_protocol);
int FUNC_0(QemuOpts *VAR_0)

{

    struct addrinfo VAR_1, *VAR_2 = NULL, *VAR_3 = NULL;

    const char *VAR_4;

    const char *VAR_5;

    char VAR_6[INET6_ADDRSTRLEN+1];

    char VAR_7[33];

    int VAR_8 = -1, VAR_9;



    

    memset(&VAR_1,0, sizeof(VAR_1));

    VAR_1.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    VAR_1.ai_family = PF_UNSPEC;

    VAR_1.ai_socktype = SOCK_DGRAM;



    VAR_4 = qemu_opt_get(VAR_0, "host");

    VAR_5 = qemu_opt_get(VAR_0, "VAR_5");

    if (VAR_4 == NULL || strlen(VAR_4) == 0) {

        VAR_4 = "localhost";

    }

    if (VAR_5 == NULL || strlen(VAR_5) == 0) {

        fprintf(stderr, "inet_dgram: VAR_5 not specified\n");

        return -1;

    }



    if (qemu_opt_get_bool(VAR_0, "ipv4", 0))

        VAR_1.ai_family = PF_INET;

    if (qemu_opt_get_bool(VAR_0, "ipv6", 0))

        VAR_1.ai_family = PF_INET6;



    if (0 != (VAR_9 = getaddrinfo(VAR_4, VAR_5, &VAR_1, &VAR_2))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_4, VAR_5,

                gai_strerror(VAR_9));

	return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: VAR_2 (%s:%s)\n", __FUNCTION__, VAR_4, VAR_5);

        inet_print_addrinfo(__FUNCTION__, VAR_2);

    }



    

    memset(&VAR_1,0, sizeof(VAR_1));

    VAR_1.ai_flags = AI_PASSIVE;

    VAR_1.ai_family = VAR_2->ai_family;

    VAR_1.ai_socktype = SOCK_DGRAM;



    VAR_4 = qemu_opt_get(VAR_0, "localaddr");

    VAR_5 = qemu_opt_get(VAR_0, "localport");

    if (VAR_4 == NULL || strlen(VAR_4) == 0) {

        VAR_4 = NULL;

    }

    if (!VAR_5 || strlen(VAR_5) == 0)

        VAR_5 = "0";



    if (0 != (VAR_9 = getaddrinfo(VAR_4, VAR_5, &VAR_1, &VAR_3))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_4, VAR_5,

                gai_strerror(VAR_9));

        return -1;

    }

    if (sockets_debug) {

        fprintf(stderr, "%s: VAR_3 (%s:%s)\n", __FUNCTION__, VAR_4, VAR_5);

        inet_print_addrinfo(__FUNCTION__, VAR_3);

    }



    

    VAR_8 = socket(VAR_2->ai_family, VAR_2->ai_socktype, VAR_2->ai_protocol);

    if (VAR_8 < 0) {

        fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,

                inet_strfamily(VAR_2->ai_family), strerror(errno));

        goto err;

    }

    setsockopt(VAR_8,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on));



    

    if (getnameinfo((struct sockaddr*)VAR_3->ai_addr,VAR_3->ai_addrlen,

                    VAR_6,INET6_ADDRSTRLEN,VAR_7,32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (bind(VAR_8, VAR_3->ai_addr, VAR_3->ai_addrlen) < 0) {

        fprintf(stderr,"%s: bind(%s,%s,%d): OK\n", __FUNCTION__,

                inet_strfamily(VAR_3->ai_family), VAR_6, inet_getport(VAR_3));

        goto err;

    }



    

    if (getnameinfo((struct sockaddr*)VAR_2->ai_addr, VAR_2->ai_addrlen,

                    VAR_6, INET6_ADDRSTRLEN, VAR_7, 32,

                    NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

        fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__);

        goto err;

    }

    if (connect(VAR_8,VAR_2->ai_addr,VAR_2->ai_addrlen) < 0) {

        fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,

                inet_strfamily(VAR_2->ai_family),

                VAR_2->ai_canonname, VAR_6, VAR_7, strerror(errno));

        goto err;

    }



    freeaddrinfo(VAR_3);

    freeaddrinfo(VAR_2);

    return VAR_8;



err:

    if (-1 != VAR_8)

        closesocket(VAR_8);

    if (VAR_3)

        freeaddrinfo(VAR_3);

    if (VAR_2)

        freeaddrinfo(VAR_2);

    return -1;

}

int FUNC_0(QemuOpts *VAR_0)
{ struct addrinfo VAR_1, *VAR_2 = NULL, *VAR_3 = NULL; const char *VAR_4; const char *VAR_5; char VAR_6[INET6_ADDRSTRLEN+1]; char VAR_7[33]; int VAR_8 = -1, VAR_9; memset(&VAR_1,0, sizeof(VAR_1)); VAR_1.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; VAR_1.ai_family = PF_UNSPEC; VAR_1.ai_socktype = SOCK_DGRAM; VAR_4 = qemu_opt_get(VAR_0, "host"); VAR_5 = qemu_opt_get(VAR_0, "VAR_5"); if (VAR_4 == NULL || strlen(VAR_4) == 0) { VAR_4 = "localhost"; } if (VAR_5 == NULL || strlen(VAR_5) == 0) { fprintf(stderr, "inet_dgram: VAR_5 not specified\n"); return -1; } if (qemu_opt_get_bool(VAR_0, "ipv4", 0))
VAR_1.ai_family = PF_INET; if (qemu_opt_get_bool(VAR_0, "ipv6", 0))
VAR_1.ai_family = PF_INET6; if (0 != (VAR_9 = getaddrinfo(VAR_4, VAR_5, &VAR_1, &VAR_2))) { fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_4, VAR_5,
gai_strerror(VAR_9)); return -1; } if (sockets_debug) { fprintf(stderr, "%s: VAR_2 (%s:%s)\n", __FUNCTION__, VAR_4, VAR_5); inet_print_addrinfo(__FUNCTION__, VAR_2); } memset(&VAR_1,0, sizeof(VAR_1)); VAR_1.ai_flags = AI_PASSIVE; VAR_1.ai_family = VAR_2->ai_family; VAR_1.ai_socktype = SOCK_DGRAM; VAR_4 = qemu_opt_get(VAR_0, "localaddr"); VAR_5 = qemu_opt_get(VAR_0, "localport"); if (VAR_4 == NULL || strlen(VAR_4) == 0) { VAR_4 = NULL; } if (!VAR_5 || strlen(VAR_5) == 0)
VAR_5 = "0"; if (0 != (VAR_9 = getaddrinfo(VAR_4, VAR_5, &VAR_1, &VAR_3))) { fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_4, VAR_5,
gai_strerror(VAR_9)); return -1; } if (sockets_debug) { fprintf(stderr, "%s: VAR_3 (%s:%s)\n", __FUNCTION__, VAR_4, VAR_5); inet_print_addrinfo(__FUNCTION__, VAR_3); } VAR_8 = socket(VAR_2->ai_family, VAR_2->ai_socktype, VAR_2->ai_protocol); if (VAR_8 < 0) { fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_2->ai_family), strerror(errno)); goto err; } setsockopt(VAR_8,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on)); if (getnameinfo((struct sockaddr*)VAR_3->ai_addr,VAR_3->ai_addrlen,
VAR_6,INET6_ADDRSTRLEN,VAR_7,32,
NI_NUMERICHOST | NI_NUMERICSERV) != 0) { fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__); goto err; } if (bind(VAR_8, VAR_3->ai_addr, VAR_3->ai_addrlen) < 0) { fprintf(stderr,"%s: bind(%s,%s,%d): OK\n", __FUNCTION__,
inet_strfamily(VAR_3->ai_family), VAR_6, inet_getport(VAR_3)); goto err; } if (getnameinfo((struct sockaddr*)VAR_2->ai_addr, VAR_2->ai_addrlen,
VAR_6, INET6_ADDRSTRLEN, VAR_7, 32,
NI_NUMERICHOST | NI_NUMERICSERV) != 0) { fprintf(stderr, "%s: getnameinfo: oops\n", __FUNCTION__); goto err; } if (connect(VAR_8,VAR_2->ai_addr,VAR_2->ai_addrlen) < 0) { fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_2->ai_family),
VAR_2->ai_canonname, VAR_6, VAR_7, strerror(errno)); goto err; } freeaddrinfo(VAR_3); freeaddrinfo(VAR_2); return VAR_8; err:
if (-1 != VAR_8)
closesocket(VAR_8); if (VAR_3)
freeaddrinfo(VAR_3); if (VAR_2)
freeaddrinfo(VAR_2); return -1; }