Показать сообщение отдельно

  #4  
Старый 17.04.2009, 20:10
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

могу предположить следующее.... recv не обязательно получает указаное количество байт... тоесть вся страница приходит в разных покетах

вот пример реализации "правильной" функции получения и отправки данных на Си

Код:
int sendall(SOCKET s, char *buf, int len, int flags)
{
    int total = 0;
    int n;

    while(total < len)
    {
        n = send(s, buf+total, len-total, flags);
        if(n == -1) { break; }
        total += n;
    }

    return (n==-1 ? -1 : total);
}

// принять ВСЕ ... - правильная функция
int recvall(SOCKET s, char *buf, int len, int flags)
{
    int total = 0;
    int n;

    while(total < len)
    {
        n = recv(s, buf+total, len-total, flags);
        if(n == -1) { break; }
        total += n;
    }

    return (n==-1 ? -1 : total);
}
на PERL давно не писал, но если сам не сможешь помогу перевести код
 
Ответить с цитированием