Окончание “recv ()” цикл, когда всей информацией является использование Read Winsock

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

Спасибо

6
задан RageD 27 July 2010 в 02:37
поделиться