У меня есть проблема в моем 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
Спасибо