
17.04.2009, 20:10
|
|
Постоянный
Регистрация: 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 давно не писал, но если сам не сможешь помогу перевести код
|
|
|