Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Принятие даных через сокет


Автор: fray 13.10.2008, 13:31
Такой вопрос, 
Select сказал что данные пришли в сокет, протокол (HTTP), заголовок скажем Content-Length: 2048
У меня статичиский буфер(buf)  размером 1024 в который я читаю из сокета

len = read(socket, buf, 1024 -1 );
buf[len+1] = '\0';

Могу ли я точно узнать сколько данных пришло в сокет( чтобы не читать снова len = read(socket, buf, 1024 -1 ); )
скажем что-то типа:

если данных пришло больше чем 1024 
        то тогда читаю в динамический буффер 
если нет 
      то в статический
Позволяет ли select или kqeueu узнавать о том сколько данных пришло в сокет ?

  Спасибо.





Автор: GrayCardinal 13.10.2008, 14:06
fray
Цитата

#include <sys/ioctl.h>

int DIONREAD (int fd)
{
    int ret = -1;
    if (ioctl (fd, FIONREAD, &ret) != 0)
  return -1;
    return ret;
}

Скармливаешь функтяре дескриптор, получаешь кол.-во доступных байт для чтения. Фурычет как на файлах так и на сокетах...............

Автор: fray 13.10.2008, 14:15
Цитата(GrayCardinal @ 13.10.2008,  14:06)
fray
Цитата

#include <sys/ioctl.h>

int DIONREAD (int fd)
{
    int ret = -1;
    if (ioctl (fd, FIONREAD, &ret) != 0)
  return -1;
    return ret;
}

Скармливаешь функтяре дескриптор, получаешь кол.-во доступных байт для чтения. Фурычет как на файлах так и на сокетах...............

Ага спасибо smile

Автор: GrayCardinal 13.10.2008, 14:16
fray
Завсегда пожалуйста..........

Автор: fray 14.10.2008, 12:51
.... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)