Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как очистить буфер сокета но при этом оставить, возможность дальнейшего получения данных 
:(
    Опции темы
Nuzur
Дата 11.10.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Сабж.


--------------------
Never again...
PM MAIL   Вверх
ptr
Дата 12.10.2007, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 661
Регистрация: 31.5.2006
Где: Новосибирск

Репутация: 9
Всего: 14



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


--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
Nuzur
Дата 12.10.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



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

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

Это сообщение отредактировал(а) Nuzur - 12.10.2007, 09:29


--------------------
Never again...
PM MAIL   Вверх
GrayCardinal
Дата 12.10.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 3
Всего: 58



Берём :
Код

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

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

Это сообщение отредактировал(а) GrayCardinal - 12.10.2007, 10:32


--------------------
PM MAIL WWW   Вверх
Nuzur
Дата 17.10.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



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


--------------------
Never again...
PM MAIL   Вверх
GrayCardinal
Дата 17.10.2007, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 3
Всего: 58



Nuzur
Никак не узнает. Вернёт только сколько уже есть, ничего дожидаться не будет...

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


--------------------
PM MAIL WWW   Вверх
Nuzur
Дата 17.10.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



GrayCardinal, тогда это не решает моей проблемы...


--------------------
Never again...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.