recv - очистить/сбросить часть входной очереди tcp сокета
От: dosik Россия www.dosik.ru
Дата: 16.06.16 22:52
Оценка:
Есть сетевое приложение, в котором необходимо прочитать из tcp соединения часть данных, которая определяется разделителем. Все, что за разделителем предназначено для следующего чтения. Данные не фиксированной длинны, поступают в произвольнные промежутки времени.
Как я понимаю, то, что прочитано recv, обратно в входную очередь уже не вернуть (вариант аля прочитал все, взял свое, остальное сунул обратно).
Тут на помощь может прийти флаг MSG_PEEK, но смущает необходимость двойного чтения — сначала читаю в буфер все (ну или в буфер с гарантированно ограниченным размером) с флагом MSG_PEEK, нахожу в буфере разделить, выделяю данные, и читаю "вникуда" данные из входной очереди без флага MSG_PEEK, чтобы из от туда удалить.
Быть может есть возможность просто указать системе, чтобы она удалила данные из входной очереди без чтения?
Re: recv - очистить/сбросить часть входной очереди tcp сокета
От: Pasha1st  
Дата: 18.06.16 11:05
Оценка: +1
Здравствуйте, dosik, Вы писали:

D>Есть сетевое приложение, в котором необходимо прочитать из tcp соединения часть данных, которая определяется разделителем. Все, что за разделителем предназначено для следующего чтения. Данные не фиксированной длинны, поступают в произвольнные промежутки времени.

D>Как я понимаю, то, что прочитано recv, обратно в входную очередь уже не вернуть (вариант аля прочитал все, взял свое, остальное сунул обратно).
D>Тут на помощь может прийти флаг MSG_PEEK, но смущает необходимость двойного чтения — сначала читаю в буфер все (ну или в буфер с гарантированно ограниченным размером) с флагом MSG_PEEK, нахожу в буфере разделить, выделяю данные, и читаю "вникуда" данные из входной очереди без флага MSG_PEEK, чтобы из от туда удалить.
D>Быть может есть возможность просто указать системе, чтобы она удалила данные из входной очереди без чтения?

Может стоит рассмотреть использование собственного буфера чтения, куда данные будут складываться и выбираться уже так как удобно?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.