As suggested by Jacek.
Signed-off-by: Hans Leidekker hans@codeweavers.com --- dlls/webservices/channel.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
diff --git a/dlls/webservices/channel.c b/dlls/webservices/channel.c index 94c3dc1e99..b945c7f55a 100644 --- a/dlls/webservices/channel.c +++ b/dlls/webservices/channel.c @@ -1150,27 +1150,21 @@ static void set_blocking( SOCKET socket, BOOL blocking ) ioctlsocket( socket, FIONBIO, &state ); }
-static int sock_peek( SOCKET socket ) +static int sock_recv( SOCKET socket, char *buf, int len ) { - int ret; - char byte; + int count, ret;
- set_blocking( socket, FALSE ); - ret = recv( socket, &byte, 1, MSG_PEEK ); - set_blocking( socket, TRUE ); - return ret; -} + if ((ret = recv( socket, buf, len, 0 )) <= 0) return ret; + len -= ret;
-static int sock_recv( SOCKET socket, char *buf, int len ) -{ - int count, ret = 0; + set_blocking( socket, FALSE ); for (;;) { if ((count = recv( socket, buf + ret, len, 0 )) <= 0) break; ret += count; len -= count; - if (sock_peek( socket ) != 1) break; } + set_blocking( socket, TRUE ); return ret; }