static int tcp_open(URLContext *h, const char *uri, int flags)

{

    struct sockaddr_in dest_addr;

    int port, fd = -1;

    TCPContext *s = NULL;

    fd_set wfds;

    int fd_max, ret;

    struct timeval tv;

    socklen_t optlen;

    char hostname[1024],proto[1024],path[1024],tmp[1024],*q;



    if(!ff_network_init())

        return AVERROR(EIO);



    url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),

        &port, path, sizeof(path), uri);

    if (strcmp(proto,"tcp") || port <= 0 || port >= 65536)

        return AVERROR(EINVAL);

    if ((q = strchr(hostname,'@'))) { strcpy(tmp,q+1); strcpy(hostname,tmp); }



    dest_addr.sin_family = AF_INET;

    dest_addr.sin_port = htons(port);

    if (resolve_host(&dest_addr.sin_addr, hostname) < 0)

        return AVERROR(EIO);



    fd = socket(AF_INET, SOCK_STREAM, 0);

    if (fd < 0)

        return AVERROR(EIO);

    ff_socket_nonblock(fd, 1);



 redo:

    ret = connect(fd, (struct sockaddr *)&dest_addr,

                  sizeof(dest_addr));

    if (ret < 0) {

        if (ff_neterrno() == FF_NETERROR(EINTR))

            goto redo;

        if (ff_neterrno() != FF_NETERROR(EINPROGRESS) &&

            ff_neterrno() != FF_NETERROR(EAGAIN))

            goto fail;



        /* wait until we are connected or until abort */

        for(;;) {

            if (url_interrupt_cb()) {

                ret = AVERROR(EINTR);

                goto fail1;

            }

            fd_max = fd;

            FD_ZERO(&wfds);

            FD_SET(fd, &wfds);

            tv.tv_sec = 0;

            tv.tv_usec = 100 * 1000;

            ret = select(fd_max + 1, NULL, &wfds, NULL, &tv);

            if (ret > 0 && FD_ISSET(fd, &wfds))

                break;

        }



        /* test error */

        optlen = sizeof(ret);

        getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen);

        if (ret != 0)

            goto fail;

    }

    s = av_malloc(sizeof(TCPContext));

    if (!s)

        return AVERROR(ENOMEM);

    h->priv_data = s;

    h->is_streamed = 1;

    s->fd = fd;

    return 0;



 fail:

    ret = AVERROR(EIO);

 fail1:

    if (fd >= 0)

        closesocket(fd);

    return ret;

}

static int tcp_open(URLContext *h, const char *uri, int flags)

{

    struct sockaddr_in dest_addr;

    int port, fd = -1;

    TCPContext *s = NULL;

    fd_set wfds;

    int fd_max, ret;

    struct timeval tv;

    socklen_t optlen;

    char hostname[1024],proto[1024],path[1024],tmp[1024],*q;



    if(!ff_network_init())

        return AVERROR(EIO);



    url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname),

        &port, path, sizeof(path), uri);

    if (strcmp(proto,"tcp") || port <= 0 || port >= 65536)

        return AVERROR(EINVAL);

    if ((q = strchr(hostname,'@'))) { strcpy(tmp,q+1); strcpy(hostname,tmp); }



    dest_addr.sin_family = AF_INET;

    dest_addr.sin_port = htons(port);

    if (resolve_host(&dest_addr.sin_addr, hostname) < 0)

        return AVERROR(EIO);



    fd = socket(AF_INET, SOCK_STREAM, 0);

    if (fd < 0)

        return AVERROR(EIO);

    ff_socket_nonblock(fd, 1);



 redo:

    ret = connect(fd, (struct sockaddr *)&dest_addr,

                  sizeof(dest_addr));

    if (ret < 0) {

        if (ff_neterrno() == FF_NETERROR(EINTR))

            goto redo;

        if (ff_neterrno() != FF_NETERROR(EINPROGRESS) &&

            ff_neterrno() != FF_NETERROR(EAGAIN))

            goto fail;



        

        for(;;) {

            if (url_interrupt_cb()) {

                ret = AVERROR(EINTR);

                goto fail1;

            }

            fd_max = fd;

            FD_ZERO(&wfds);

            FD_SET(fd, &wfds);

            tv.tv_sec = 0;

            tv.tv_usec = 100 * 1000;

            ret = select(fd_max + 1, NULL, &wfds, NULL, &tv);

            if (ret > 0 && FD_ISSET(fd, &wfds))

                break;

        }



        

        optlen = sizeof(ret);

        getsockopt (fd, SOL_SOCKET, SO_ERROR, &ret, &optlen);

        if (ret != 0)

            goto fail;

    }

    s = av_malloc(sizeof(TCPContext));

    if (!s)

        return AVERROR(ENOMEM);

    h->priv_data = s;

    h->is_streamed = 1;

    s->fd = fd;

    return 0;



 fail:

    ret = AVERROR(EIO);

 fail1:

    if (fd >= 0)

        closesocket(fd);

    return ret;

}

    char hostname[1024],proto[1024],path[1024],tmp[1024],*q;     if ((q = strchr(hostname,'@'))) { strcpy(tmp,q+1); strcpy(hostname,tmp); }
static int FUNC_0(URLContext *VAR_0, const char *VAR_1, int VAR_2)

{

    struct sockaddr_in VAR_3;

    int VAR_4, VAR_5 = -1;

    TCPContext *s = NULL;

    fd_set wfds;

    int VAR_6, VAR_7;

    struct timeval VAR_8;

    socklen_t optlen;

    char VAR_9[1024],VAR_10[1024],VAR_11[1024],VAR_12[1024],*VAR_13;



    if(!ff_network_init())

        return AVERROR(EIO);



    url_split(VAR_10, sizeof(VAR_10), NULL, 0, VAR_9, sizeof(VAR_9),

        &VAR_4, VAR_11, sizeof(VAR_11), VAR_1);

    if (strcmp(VAR_10,"tcp") || VAR_4 <= 0 || VAR_4 >= 65536)

        return AVERROR(EINVAL);

    if ((VAR_13 = strchr(VAR_9,'@'))) { strcpy(VAR_12,VAR_13+1); strcpy(VAR_9,VAR_12); }



    VAR_3.sin_family = AF_INET;

    VAR_3.sin_port = htons(VAR_4);

    if (resolve_host(&VAR_3.sin_addr, VAR_9) < 0)

        return AVERROR(EIO);



    VAR_5 = socket(AF_INET, SOCK_STREAM, 0);

    if (VAR_5 < 0)

        return AVERROR(EIO);

    ff_socket_nonblock(VAR_5, 1);



 redo:

    VAR_7 = connect(VAR_5, (struct sockaddr *)&VAR_3,

                  sizeof(VAR_3));

    if (VAR_7 < 0) {

        if (ff_neterrno() == FF_NETERROR(EINTR))

            goto redo;

        if (ff_neterrno() != FF_NETERROR(EINPROGRESS) &&

            ff_neterrno() != FF_NETERROR(EAGAIN))

            goto fail;



        

        for(;;) {

            if (url_interrupt_cb()) {

                VAR_7 = AVERROR(EINTR);

                goto fail1;

            }

            VAR_6 = VAR_5;

            FD_ZERO(&wfds);

            FD_SET(VAR_5, &wfds);

            VAR_8.tv_sec = 0;

            VAR_8.tv_usec = 100 * 1000;

            VAR_7 = select(VAR_6 + 1, NULL, &wfds, NULL, &VAR_8);

            if (VAR_7 > 0 && FD_ISSET(VAR_5, &wfds))

                break;

        }



        

        optlen = sizeof(VAR_7);

        getsockopt (VAR_5, SOL_SOCKET, SO_ERROR, &VAR_7, &optlen);

        if (VAR_7 != 0)

            goto fail;

    }

    s = av_malloc(sizeof(TCPContext));

    if (!s)

        return AVERROR(ENOMEM);

    VAR_0->priv_data = s;

    VAR_0->is_streamed = 1;

    s->VAR_5 = VAR_5;

    return 0;



 fail:

    VAR_7 = AVERROR(EIO);

 fail1:

    if (VAR_5 >= 0)

        closesocket(VAR_5);

    return VAR_7;

}

static int FUNC_0(URLContext *VAR_0, const char *VAR_1, int VAR_2)
{ struct sockaddr_in VAR_3; int VAR_4, VAR_5 = -1; TCPContext *s = NULL; fd_set wfds; int VAR_6, VAR_7; struct timeval VAR_8; socklen_t optlen; char VAR_9[1024],VAR_10[1024],VAR_11[1024],VAR_12[1024],*VAR_13; if(!ff_network_init())
return AVERROR(EIO); url_split(VAR_10, sizeof(VAR_10), NULL, 0, VAR_9, sizeof(VAR_9),
&VAR_4, VAR_11, sizeof(VAR_11), VAR_1); if (strcmp(VAR_10,"tcp") || VAR_4 <= 0 || VAR_4 >= 65536)
return AVERROR(EINVAL); if ((VAR_13 = strchr(VAR_9,'@'))) { strcpy(VAR_12,VAR_13+1); strcpy(VAR_9,VAR_12); } VAR_3.sin_family = AF_INET; VAR_3.sin_port = htons(VAR_4); if (resolve_host(&VAR_3.sin_addr, VAR_9) < 0)
return AVERROR(EIO); VAR_5 = socket(AF_INET, SOCK_STREAM, 0); if (VAR_5 < 0)
return AVERROR(EIO); ff_socket_nonblock(VAR_5, 1); redo:
VAR_7 = connect(VAR_5, (struct sockaddr *)&VAR_3,
sizeof(VAR_3)); if (VAR_7 < 0) { if (ff_neterrno() == FF_NETERROR(EINTR))
goto redo; if (ff_neterrno() != FF_NETERROR(EINPROGRESS) &&
ff_neterrno() != FF_NETERROR(EAGAIN))
goto fail; for(;;) { if (url_interrupt_cb()) { VAR_7 = AVERROR(EINTR); goto fail1; } VAR_6 = VAR_5; FD_ZERO(&wfds); FD_SET(VAR_5, &wfds); VAR_8.tv_sec = 0; VAR_8.tv_usec = 100 * 1000; VAR_7 = select(VAR_6 + 1, NULL, &wfds, NULL, &VAR_8); if (VAR_7 > 0 && FD_ISSET(VAR_5, &wfds))
break; } optlen = sizeof(VAR_7); getsockopt (VAR_5, SOL_SOCKET, SO_ERROR, &VAR_7, &optlen); if (VAR_7 != 0)
goto fail; } s = av_malloc(sizeof(TCPContext)); if (!s)
return AVERROR(ENOMEM); VAR_0->priv_data = s; VAR_0->is_streamed = 1; s->VAR_5 = VAR_5; return 0; fail:
VAR_7 = AVERROR(EIO); fail1:
if (VAR_5 >= 0)
closesocket(VAR_5); return VAR_7; }