Доброго времени суток.
Приложение посылает xml-запросы серверу и получает их в таком же виде.
Имею возможность видеть лог сервиса на сервере, ко мне уходит "большой"(24к) ответ, InternetReadFile читает маленький кусочек и все, а когда я закрываю handle запроса вываливаеться исключение win32.
Код
if (!HttpSendRequest(hRequest, NULL, 0, (LPVOID)postData, postDataSize)) //шлю хмл
{
ret = EHTTPERROR_CreateHTTPRequestFailed;
break;
}
if (!HttpEndRequest(hRequest, NULL, 0, 0))
{
DWORD d = GetLastError();
ret = EHTTPERROR_CreateHTTPRequestFailed;
break;
}
// read answer
char buff[ 1024 ];
int recived = 0;
while (1)
{
DWORD nread = 0;
if (!InternetReadFile(hRequest, buff, 1024, &nread)) //читает все время 1736 байт от длиного ответа
{
ret = EHTTPERROR_CreateHTTPRequestFailed;
break;
}
if (nread)
{
int oldSize = recived;
recived += nread;
memcpy(recvData + oldSize, buff, nread);
}
else
break;
}
recvData[ recived ] = 0;
break;
}
if (hRequest)
InternetCloseHandle(hRequest); //исключение, так как не все дочитал
Если кто сталкивался с таким, прошу помочь.
Заранее спасибо
Здравствуйте, Alex Fedotov.
AF>1. По какому условию заканчивается цикл? Если InternetReadFile возвращает FALSE, то какой код ошибки выдает GetLastError?
FALSE не возвращаеться, цикл заканчиваеться когда nread = 0;
AF>2. Вы уверены, что в recvData достаточно места, чтобы получить все данные?
Да.
AF>3. InternetCloseHandle не будет бросать исключение если не все данные прочитаны. Скорее, вы где-то память портите.
Ничего не могу ответить. Вроде все коректно. Могу выслать весь мой код.
AF>P.S. не recived, a received.
Спасибо — будет исправлено, в следующей версии.
Почему-то закрадываеться мысль, что виноват squid.