int inet_connect_opts(QemuOpts *opts)

{

    struct addrinfo ai,*res,*e;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock,rc;



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

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_STREAM;



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    if (addr == NULL || port == NULL) {

        fprintf(stderr, "inet_connect: host and/or 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;



    /* lookup */

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

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

                gai_strerror(rc));

	return -1;

    }

    if (sockets_debug)

        inet_print_addrinfo(__FUNCTION__, res);



    for (e = res; e != NULL; e = e->ai_next) {

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

                            uaddr,INET6_ADDRSTRLEN,uport,32,

                            NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

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

            continue;

        }

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

        if (sock < 0) {

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

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

            continue;

        }

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



        /* connect to peer */

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

            if (sockets_debug || NULL == e->ai_next)

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

                        inet_strfamily(e->ai_family),

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

            closesocket(sock);

            continue;

        }

        if (sockets_debug)

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

                    inet_strfamily(e->ai_family),

                    e->ai_canonname, uaddr, uport);

        freeaddrinfo(res);

        return sock;

    }

    freeaddrinfo(res);

    return -1;

}

int inet_connect_opts(QemuOpts *opts)

{

    struct addrinfo ai,*res,*e;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock,rc;



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

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_STREAM;



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    if (addr == NULL || port == NULL) {

        fprintf(stderr, "inet_connect: host and/or 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, &res))) {

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

                gai_strerror(rc));

	return -1;

    }

    if (sockets_debug)

        inet_print_addrinfo(__FUNCTION__, res);



    for (e = res; e != NULL; e = e->ai_next) {

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

                            uaddr,INET6_ADDRSTRLEN,uport,32,

                            NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

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

            continue;

        }

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

        if (sock < 0) {

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

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

            continue;

        }

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



        

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

            if (sockets_debug || NULL == e->ai_next)

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

                        inet_strfamily(e->ai_family),

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

            closesocket(sock);

            continue;

        }

        if (sockets_debug)

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

                    inet_strfamily(e->ai_family),

                    e->ai_canonname, uaddr, uport);

        freeaddrinfo(res);

        return sock;

    }

    freeaddrinfo(res);

    return -1;

}

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

{

    struct addrinfo VAR_1,*VAR_2,*VAR_3;

    const char *VAR_4;

    const char *VAR_5;

    char VAR_6[INET6_ADDRSTRLEN+1];

    char VAR_7[33];

    int VAR_8,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_STREAM;



    VAR_4 = qemu_opt_get(VAR_0, "host");

    VAR_5 = qemu_opt_get(VAR_0, "VAR_5");

    if (VAR_4 == NULL || VAR_5 == NULL) {

        fprintf(stderr, "inet_connect: host and/or 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)

        inet_print_addrinfo(__FUNCTION__, VAR_2);



    for (VAR_3 = VAR_2; VAR_3 != NULL; VAR_3 = VAR_3->ai_next) {

        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__);

            continue;

        }

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

        if (VAR_8 < 0) {

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

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

            continue;

        }

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



        

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

            if (sockets_debug || NULL == VAR_3->ai_next)

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

                        inet_strfamily(VAR_3->ai_family),

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

            closesocket(VAR_8);

            continue;

        }

        if (sockets_debug)

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

                    inet_strfamily(VAR_3->ai_family),

                    VAR_3->ai_canonname, VAR_6, VAR_7);

        freeaddrinfo(VAR_2);

        return VAR_8;

    }

    freeaddrinfo(VAR_2);

    return -1;

}

int FUNC_0(QemuOpts *VAR_0)
{ struct addrinfo VAR_1,*VAR_2,*VAR_3; const char *VAR_4; const char *VAR_5; char VAR_6[INET6_ADDRSTRLEN+1]; char VAR_7[33]; int VAR_8,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_STREAM; VAR_4 = qemu_opt_get(VAR_0, "host"); VAR_5 = qemu_opt_get(VAR_0, "VAR_5"); if (VAR_4 == NULL || VAR_5 == NULL) { fprintf(stderr, "inet_connect: host and/or 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)
inet_print_addrinfo(__FUNCTION__, VAR_2); for (VAR_3 = VAR_2; VAR_3 != NULL; VAR_3 = VAR_3->ai_next) { 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__); continue; } VAR_8 = socket(VAR_3->ai_family, VAR_3->ai_socktype, VAR_3->ai_protocol); if (VAR_8 < 0) { fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_3->ai_family), strerror(errno)); continue; } setsockopt(VAR_8,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on)); if (connect(VAR_8,VAR_3->ai_addr,VAR_3->ai_addrlen) < 0) { if (sockets_debug || NULL == VAR_3->ai_next)
fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_3->ai_family),
VAR_3->ai_canonname, VAR_6, VAR_7, strerror(errno)); closesocket(VAR_8); continue; } if (sockets_debug)
fprintf(stderr, "%s: connect(%s,%s,%s,%s): OK\n", __FUNCTION__,
inet_strfamily(VAR_3->ai_family),
VAR_3->ai_canonname, VAR_6, VAR_7); freeaddrinfo(VAR_2); return VAR_8; } freeaddrinfo(VAR_2); return -1; }