Вот метод, в котором находится цикл while. Я просто подключился к серверу, отправив HTTP-запрос и прочитав ответ. Когда я отлаживаю, я до сих пор не могу понять, почему этот цикл while не передается.Хотя цикл прерывается, но код после него никогда не выполняется
void HttpSocket::Get(string address)
{
std::string response, host, httpRequest;
uint32_t ipAddress;
ParseRequest(address, host, httpRequest);
ResolveHostAddress(host, ipAddress);
HttpSocket::Connect(ipAddress);
strcpy(bufferToSend, httpRequest.c_str());
n = write(sockfd,bufferToSend,strlen(bufferToSend));
if (n < 0) { throw IO_Exception("Cannot send request."); }
memset(bufferToSend, 0, 500);
memset(bufferToReceive, 0, 200);
n = read(sockfd,bufferToReceive,200);
if (n <= 0){
throw IO_Exception("Cannot read response.");
}
else
{
response += bufferToReceive;
while(n != 0)
{
n = 0;
memset(bufferToReceive, 0, 200);
n = read(sockfd,bufferToReceive,200);
response += bufferToReceive;
cout << "still in the loop" << n << endl;
}
cout << "Response: " << response << endl;
}
}
Кстати n
является volatile int
таким образом, я не думаю, что оптимизация компилятор вызывает его. FYI, все нормально и работает до последнего цикла.
Stack trace/error? – Jeff
@Jeff без ошибок. Кстати, я работаю над Qt. Более того, «все еще в цикле» не печатается навсегда. Таким образом, я вижу, что программа выходит из системы while, но затем передает следующую строку кода – ozgur
Подумайте об этом: у вас есть буфер 200 символов (я предполагаю, что вы не показываете фактическое объявление), и вы читаете (и потенциально заполните) весь этот буфер. Где же тогда ограничитель строки? Как вы считаете, когда вы обрабатываете этот буфер (без терминатора) как строку? –