Есть сетевое приложение, в котором необходимо прочитать из tcp соединения часть данных, которая определяется разделителем. Все, что за разделителем предназначено для следующего чтения. Данные не фиксированной длинны, поступают в произвольнные промежутки времени.
Как я понимаю, то, что прочитано recv, обратно в входную очередь уже не вернуть (вариант аля прочитал все, взял свое, остальное сунул обратно).
Тут на помощь может прийти флаг MSG_PEEK, но смущает необходимость двойного чтения — сначала читаю в буфер все (ну или в буфер с гарантированно ограниченным размером) с флагом MSG_PEEK, нахожу в буфере разделить, выделяю данные, и читаю "вникуда" данные из входной очереди без флага MSG_PEEK, чтобы из от туда удалить.
Быть может есть возможность просто указать системе, чтобы она удалила данные из входной очереди без чтения?
Re: recv - очистить/сбросить часть входной очереди tcp сокета
Здравствуйте, dosik, Вы писали:
D>Есть сетевое приложение, в котором необходимо прочитать из tcp соединения часть данных, которая определяется разделителем. Все, что за разделителем предназначено для следующего чтения. Данные не фиксированной длинны, поступают в произвольнные промежутки времени. D>Как я понимаю, то, что прочитано recv, обратно в входную очередь уже не вернуть (вариант аля прочитал все, взял свое, остальное сунул обратно). D>Тут на помощь может прийти флаг MSG_PEEK, но смущает необходимость двойного чтения — сначала читаю в буфер все (ну или в буфер с гарантированно ограниченным размером) с флагом MSG_PEEK, нахожу в буфере разделить, выделяю данные, и читаю "вникуда" данные из входной очереди без флага MSG_PEEK, чтобы из от туда удалить. D>Быть может есть возможность просто указать системе, чтобы она удалила данные из входной очереди без чтения?
Может стоит рассмотреть использование собственного буфера чтения, куда данные будут складываться и выбираться уже так как удобно?