Делая асинхронный запрос с Wininet, когда функция обратного вызова состояния вызывается с INTERNET_STATUS_REQUEST_COMPLETE, я получаю код состояния http.
result = HttpQueryInfo(
this->requestHandle,
HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,
&value,
&sizeofDword,
&index);
Код состояния возвращается 200. После этого я вызываю InternetReadFile ().
result = InternetReadFile(
this->requestHandle,
((char*)(this->buffer)) + this->totalBytesReceived,
this->bufferSize - this->totalBytesReceived,
&bytesRead);
this->totalBytesReceived += bytesRead;
Возвращает true и устанавливает lpNumberOfBytesRead в ноль. GetLastError () возвращает ERROR_IO_PENDING, затем я жду, что функция обратного вызова вызывается снова с INTERNET_STATUS_REQUEST_COMPLETE.
Когда это происходит, InternetReadFile () возвращает true и снова устанавливает lpNumberOfBytesRead в ноль.
Если я отлаживаю приложение, я вижу после первого InternetReadFile (), что данные ответа уже находятся в lpBuffer. Более того, если я вызываю Sleep () за одну секунду до InternetReadFile (), InternetReadFile () работает правильно.
Sleep(1000);
result = InternetReadFile( ...
Я что-то пропустил?