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


Автор: Nuzur 11.10.2007, 17:25
Сабж.

Автор: ptr 12.10.2007, 05:51
Что recv уже не моде? А зачем потребовалось буфер то очищать?

Автор: Nuzur 12.10.2007, 09:12
ptr, recv и пользуюсь, буфер нужно очищать ибо идет интенсивный обмен между модулями и нужно кормить лиш частями которые до этого не принимали участие в обработке, а сохранять то что уже передал в каком то буфере а потом их сравнивать нет возможности :(
Ситуация осложняется тем что заранее неизвестно размер пакета а пакет нужно передать целиком, посему постоянно получается информация до момента либа таймаута либо до момента остановки передачи, что то в духе внутреннего тайм аута.

ЗЫ С одной стороны я уже решил задачу, но решение - велосипед.
ЗЫ Спросить каков размер буфера до его получения невозможно ибо это внешнее устройство и оно молчит как партизан.
ЗЫ Знаю что это все возможно не правильное планирование, но мы живем в материальном мире :(

Автор: GrayCardinal 12.10.2007, 10:26
Берём :
Код

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

возвращает кол-во байт, доступных для чтения (т.е. которые в приёмном буфере), Затем, собственно, recv читаем эти байты... куда-нибудь. Всё, буфер чист...

Автор: Nuzur 17.10.2007, 16:03
GrayCardinal, а будет ли оно верно работать в том случаи если мы при выполении функции попали на середину передачи, тоесть выполнитса ли функция или будет ждать финала передачи? И как она узнает когда передача будет завершена?

Автор: GrayCardinal 17.10.2007, 16:09
Nuzur, 
Никак не узнает. Вернёт только сколько уже есть, ничего дожидаться не будет...

Добавлено через 1 минуту и 44 секунды
ЗЫ
Удобно при получении UDP-шек, позволяет размер буфера делать один к одному, но и с TCP работает ...

Автор: Nuzur 17.10.2007, 16:55
GrayCardinal, тогда это не решает моей проблемы...

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