У меня возникла проблема в цикле 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.
Спасибо