У меня проблема в цикле recv () для winsock. Я пытаюсь завершить цикл, когда iResult == 0, однако цикл заканчивается только тогда, когда сокет закрывается. Похоже, что он зависает в самом последнем recv (), где iResult будет равен 0. Итак, есть ли идеи о том, как эффективно завершить цикл? Моя конечная цель (iResult == 0 или нет; возможно, я поступаю неправильно) остановить цикл, когда вся отправленная информация будет прочитана. Вот петля.
do
{
iResult = recv(socket, recvbuf, BUFLEN-1, 0);
if(iResult > 0){
// Null byte :)
// Remove that garbage >:(
recvbuf[iResult] = '\0';
printf("Recvbuf: %s\n\n\niResult: %d\n",recvbuf,iResult);
continue; // working properly
}
else if(iResult == 0)
// Connection closed properly
break;
else
{
printf("ERROR! %ld",WSAGetLastError());
break;
}
} while(iResult > 0);
Как я уже сказал, я получаю все данные, я просто не могу выйти из цикла. Следующим шагом будет запись данных обратно на сервер, но он зависнет здесь до истечения времени ожидания ping. Сокет SOCK_STREAM, а BUFLEN определяется как 0x200
.
Спасибо