Re: recv - очистить/сбросить часть входной очереди tcp сокета
От: Pasha1st  
Дата: 18.06.16 11:05
Оценка: +1
Здравствуйте, dosik, Вы писали:

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

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

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