winhttp: WinHttpQueryDataAvailable should do a blocking read if more data is expected.
Spotted by Henri Verbeet.
This commit is contained in:
parent
6e6ffab63f
commit
01e7d12848
|
@ -464,11 +464,7 @@ BOOL netconn_query_data_available( netconn_t *conn, DWORD *available )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#ifdef FIONREAD
|
#ifdef FIONREAD
|
||||||
if (!(ret = ioctl( conn->socket, FIONREAD, &unread )))
|
if (!(ret = ioctl( conn->socket, FIONREAD, &unread ))) *available = unread;
|
||||||
{
|
|
||||||
TRACE("%d bytes of queued, but unread data\n", unread);
|
|
||||||
*available += unread;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1238,7 +1238,26 @@ static BOOL query_data( request_t *request, LPDWORD available, BOOL async )
|
||||||
BOOL ret;
|
BOOL ret;
|
||||||
DWORD num_bytes;
|
DWORD num_bytes;
|
||||||
|
|
||||||
ret = netconn_query_data_available( &request->netconn, &num_bytes );
|
if ((ret = netconn_query_data_available( &request->netconn, &num_bytes )))
|
||||||
|
{
|
||||||
|
if (request->content_read < request->content_length)
|
||||||
|
{
|
||||||
|
if (!num_bytes)
|
||||||
|
{
|
||||||
|
char buffer[4096];
|
||||||
|
size_t to_read = min( sizeof(buffer), request->content_length - request->content_read );
|
||||||
|
|
||||||
|
ret = netconn_recv( &request->netconn, buffer, to_read, MSG_PEEK, (int *)&num_bytes );
|
||||||
|
if (ret && !num_bytes) WARN("expected more data to be available\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (num_bytes)
|
||||||
|
{
|
||||||
|
WARN("extra data available %u\n", num_bytes);
|
||||||
|
ret = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TRACE("%u bytes available\n", num_bytes);
|
||||||
|
|
||||||
if (async)
|
if (async)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue