Juan Lang <juan.l...@gmail.com> writes:

> -BOOL netconn_connect( netconn_t *conn, const struct sockaddr *sockaddr, 
> unsigned int addr_len )
> +BOOL netconn_connect( netconn_t *conn, const struct sockaddr *sockaddr, 
> unsigned int addr_len, int timeout )
>  {
> -    if (connect( conn->socket, sockaddr, addr_len ) == -1)
> +    int res, state;
> +
> +    if (timeout > 0)
> +    {
> +        state = 1;
> +        res = ioctlsocket( conn->socket, FIONBIO, &state );
> +    }
> +    res = connect( conn->socket, sockaddr, addr_len );
> +    if (res == -1 && (errno == EINPROGRESS || errno == EAGAIN))
> +    {
> +        struct pollfd pfd;
> +
> +        pfd.fd = conn->socket;
> +        pfd.events = POLLOUT;
> +        res = poll( &pfd, 1, timeout );
> +    }

You also need to replace the errno check with the equivalent winsock
errors, and you need to correctly check the result of the poll.

-- 
Alexandre Julliard
julli...@winehq.org


Reply via email to