int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp)

{

    struct addrinfo ai,*res,*e;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock,rc;

    bool block;



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

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_STREAM;



    if (in_progress) {

        *in_progress = false;

    }



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    block = qemu_opt_get_bool(opts, "block", 0);

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

        fprintf(stderr, "inet_connect: host and/or port not specified\n");

        error_set(errp, QERR_SOCKET_CREATE_FAILED);

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

        error_set(errp, QERR_SOCKET_CREATE_FAILED);

	return -1;

    }



    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 = qemu_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 (!block) {

            socket_set_nonblock(sock);

        }

        /* connect to peer */

        do {

            rc = 0;

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

                rc = -socket_error();

            }

        } while (rc == -EINTR);



  #ifdef _WIN32

        if (!block && (rc == -EINPROGRESS || rc == -EWOULDBLOCK

                       || rc == -WSAEALREADY)) {

  #else

        if (!block && (rc == -EINPROGRESS)) {

  #endif

            if (in_progress) {

                *in_progress = true;

            }



            error_set(errp, QERR_SOCKET_CONNECT_IN_PROGRESS);

        } else if (rc < 0) {

            if (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;

        }

        freeaddrinfo(res);

        return sock;

    }

    error_set(errp, QERR_SOCKET_CONNECT_FAILED);

    freeaddrinfo(res);

    return -1;

}

int inet_connect_opts(QemuOpts *opts, bool *in_progress, Error **errp)

{

    struct addrinfo ai,*res,*e;

    const char *addr;

    const char *port;

    char uaddr[INET6_ADDRSTRLEN+1];

    char uport[33];

    int sock,rc;

    bool block;



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

    ai.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    ai.ai_family = PF_UNSPEC;

    ai.ai_socktype = SOCK_STREAM;



    if (in_progress) {

        *in_progress = false;

    }



    addr = qemu_opt_get(opts, "host");

    port = qemu_opt_get(opts, "port");

    block = qemu_opt_get_bool(opts, "block", 0);

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

        fprintf(stderr, "inet_connect: host and/or port not specified\n");

        error_set(errp, QERR_SOCKET_CREATE_FAILED);

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

        error_set(errp, QERR_SOCKET_CREATE_FAILED);

	return -1;

    }



    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 = qemu_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 (!block) {

            socket_set_nonblock(sock);

        }

        

        do {

            rc = 0;

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

                rc = -socket_error();

            }

        } while (rc == -EINTR);



  #ifdef _WIN32

        if (!block && (rc == -EINPROGRESS || rc == -EWOULDBLOCK

                       || rc == -WSAEALREADY)) {

  #else

        if (!block && (rc == -EINPROGRESS)) {

  #endif

            if (in_progress) {

                *in_progress = true;

            }



            error_set(errp, QERR_SOCKET_CONNECT_IN_PROGRESS);

        } else if (rc < 0) {

            if (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;

        }

        freeaddrinfo(res);

        return sock;

    }

    error_set(errp, QERR_SOCKET_CONNECT_FAILED);

    freeaddrinfo(res);

    return -1;

}

        return -1;         return -1;         return -1;             error_set(errp, QERR_SOCKET_CONNECT_IN_PROGRESS);
int FUNC_0(QemuOpts *VAR_0, bool *VAR_1, Error **VAR_2)

{

    struct addrinfo VAR_3,*VAR_4,*VAR_5;

    const char *VAR_6;

    const char *VAR_7;

    char VAR_8[INET6_ADDRSTRLEN+1];

    char VAR_9[33];

    int VAR_10,VAR_11;

    bool block;



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

    VAR_3.ai_flags = AI_CANONNAME | AI_ADDRCONFIG;

    VAR_3.ai_family = PF_UNSPEC;

    VAR_3.ai_socktype = SOCK_STREAM;



    if (VAR_1) {

        *VAR_1 = false;

    }



    VAR_6 = qemu_opt_get(VAR_0, "host");

    VAR_7 = qemu_opt_get(VAR_0, "VAR_7");

    block = qemu_opt_get_bool(VAR_0, "block", 0);

    if (VAR_6 == NULL || VAR_7 == NULL) {

        fprintf(stderr, "inet_connect: host and/or VAR_7 not specified\n");

        error_set(VAR_2, QERR_SOCKET_CREATE_FAILED);

        return -1;

    }



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

        VAR_3.ai_family = PF_INET;

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

        VAR_3.ai_family = PF_INET6;



    

    if (0 != (VAR_11 = getaddrinfo(VAR_6, VAR_7, &VAR_3, &VAR_4))) {

        fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_6, VAR_7,

                gai_strerror(VAR_11));

        error_set(VAR_2, QERR_SOCKET_CREATE_FAILED);

	return -1;

    }



    for (VAR_5 = VAR_4; VAR_5 != NULL; VAR_5 = VAR_5->ai_next) {

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

                            VAR_8,INET6_ADDRSTRLEN,VAR_9,32,

                            NI_NUMERICHOST | NI_NUMERICSERV) != 0) {

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

            continue;

        }

        VAR_10 = qemu_socket(VAR_5->ai_family, VAR_5->ai_socktype, VAR_5->ai_protocol);

        if (VAR_10 < 0) {

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

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

            continue;

        }

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

        if (!block) {

            socket_set_nonblock(VAR_10);

        }

        

        do {

            VAR_11 = 0;

            if (connect(VAR_10, VAR_5->ai_addr, VAR_5->ai_addrlen) < 0) {

                VAR_11 = -socket_error();

            }

        } while (VAR_11 == -EINTR);



  #ifdef _WIN32

        if (!block && (VAR_11 == -EINPROGRESS || VAR_11 == -EWOULDBLOCK

                       || VAR_11 == -WSAEALREADY)) {

  #else

        if (!block && (VAR_11 == -EINPROGRESS)) {

  #endif

            if (VAR_1) {

                *VAR_1 = true;

            }



            error_set(VAR_2, QERR_SOCKET_CONNECT_IN_PROGRESS);

        } else if (VAR_11 < 0) {

            if (NULL == VAR_5->ai_next)

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

                        inet_strfamily(VAR_5->ai_family),

                        VAR_5->ai_canonname, VAR_8, VAR_9, strerror(errno));

            closesocket(VAR_10);

            continue;

        }

        freeaddrinfo(VAR_4);

        return VAR_10;

    }

    error_set(VAR_2, QERR_SOCKET_CONNECT_FAILED);

    freeaddrinfo(VAR_4);

    return -1;

}

int FUNC_0(QemuOpts *VAR_0, bool *VAR_1, Error **VAR_2)
{ struct addrinfo VAR_3,*VAR_4,*VAR_5; const char *VAR_6; const char *VAR_7; char VAR_8[INET6_ADDRSTRLEN+1]; char VAR_9[33]; int VAR_10,VAR_11; bool block; memset(&VAR_3,0, sizeof(VAR_3)); VAR_3.ai_flags = AI_CANONNAME | AI_ADDRCONFIG; VAR_3.ai_family = PF_UNSPEC; VAR_3.ai_socktype = SOCK_STREAM; if (VAR_1) { *VAR_1 = false; } VAR_6 = qemu_opt_get(VAR_0, "host"); VAR_7 = qemu_opt_get(VAR_0, "VAR_7"); block = qemu_opt_get_bool(VAR_0, "block", 0); if (VAR_6 == NULL || VAR_7 == NULL) { fprintf(stderr, "inet_connect: host and/or VAR_7 not specified\n"); error_set(VAR_2, QERR_SOCKET_CREATE_FAILED); return -1; } if (qemu_opt_get_bool(VAR_0, "ipv4", 0))
VAR_3.ai_family = PF_INET; if (qemu_opt_get_bool(VAR_0, "ipv6", 0))
VAR_3.ai_family = PF_INET6; if (0 != (VAR_11 = getaddrinfo(VAR_6, VAR_7, &VAR_3, &VAR_4))) { fprintf(stderr,"getaddrinfo(%s,%s): %s\n", VAR_6, VAR_7,
gai_strerror(VAR_11)); error_set(VAR_2, QERR_SOCKET_CREATE_FAILED); return -1; } for (VAR_5 = VAR_4; VAR_5 != NULL; VAR_5 = VAR_5->ai_next) { if (getnameinfo((struct sockaddr*)VAR_5->ai_addr,VAR_5->ai_addrlen,
VAR_8,INET6_ADDRSTRLEN,VAR_9,32,
NI_NUMERICHOST | NI_NUMERICSERV) != 0) { fprintf(stderr,"%s: getnameinfo: oops\n", __FUNCTION__); continue; } VAR_10 = qemu_socket(VAR_5->ai_family, VAR_5->ai_socktype, VAR_5->ai_protocol); if (VAR_10 < 0) { fprintf(stderr,"%s: socket(%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_5->ai_family), strerror(errno)); continue; } setsockopt(VAR_10,SOL_SOCKET,SO_REUSEADDR,(void*)&on,sizeof(on)); if (!block) { socket_set_nonblock(VAR_10); } do { VAR_11 = 0; if (connect(VAR_10, VAR_5->ai_addr, VAR_5->ai_addrlen) < 0) { VAR_11 = -socket_error(); } } while (VAR_11 == -EINTR); #ifdef _WIN32
if (!block && (VAR_11 == -EINPROGRESS || VAR_11 == -EWOULDBLOCK
|| VAR_11 == -WSAEALREADY)) { #else
if (!block && (VAR_11 == -EINPROGRESS)) { #endif
if (VAR_1) { *VAR_1 = true; } error_set(VAR_2, QERR_SOCKET_CONNECT_IN_PROGRESS); } else if (VAR_11 < 0) { if (NULL == VAR_5->ai_next)
fprintf(stderr, "%s: connect(%s,%s,%s,%s): %s\n", __FUNCTION__,
inet_strfamily(VAR_5->ai_family),
VAR_5->ai_canonname, VAR_8, VAR_9, strerror(errno)); closesocket(VAR_10); continue; } freeaddrinfo(VAR_4); return VAR_10; } error_set(VAR_2, QERR_SOCKET_CONNECT_FAILED); freeaddrinfo(VAR_4); return -1; }