[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Re: [PATCH 2/6] webservices: Try to receive the whole message at once.
From:       Jacek Caban <jacek () codeweavers ! com>
Date:       2018-10-31 15:06:08
Message-ID: 76bd8c86-4f61-e470-fefb-e79e438bd722 () codeweavers ! com
[Download RAW message or body]

Hi Hans,

On 10/31/2018 02:21 PM, Hans Leidekker wrote:
> +static void set_blocking( SOCKET socket, BOOL blocking )
> +{
> +    ULONG state = !blocking;
> +    ioctlsocket( socket, FIONBIO, &state );
> +}
> +
> +static int sock_peek( SOCKET socket )
> +{
> +    int ret;
> +    char byte;
> +
> +    set_blocking( socket, FALSE );
> +    ret = recv( socket, &byte, 1, MSG_PEEK );
> +    set_blocking( socket, TRUE );
> +    return ret;
> +}
> +
> +static int sock_recv( SOCKET socket, char *buf, int len )
> +{
> +    int count, ret = 0;
> +    for (;;)
> +    {
> +        if ((count = recv( socket, buf + ret, len, 0 )) <= 0) break;
> +        ret += count;
> +        len -= count;
> +        if (sock_peek( socket ) != 1) break;

It seems to me that you don't really need sock_peek. You could just set
socket to non-blocking mode after the first successful recv.

Jacek



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic