boost :: asio - заглядывать в буфер буфера - PullRequest
2 голосов
/ 04 февраля 2012

Я использую boost :: asio :: read (или может быть эквивалент async_read ) для чтения некоторых данных из сокета.

Возможно ли, чтобы я оставил считанные байты восновной сокет, чтобы при следующем вызове read на сокете я снова получал эти данные?

Ответы [ 2 ]

3 голосов
/ 04 февраля 2012

Как сказал Саймон, вы не можете сделать это с boost::asio::read() (или boost::asio::async_read()).Однако для read() вы можете вызвать native_handle() в сокете, чтобы получить дескриптор сокета, а затем использовать ::recvmsg() с флагом MSG_PEEK.Аналогично, вы можете вызвать async_read() с null_buffers() в качестве буфера приема, а затем использовать трюк native_handle() / ::recvmsg() для просмотра данных.Прочтите этот раздел документации повышения, чтобы узнать, как использовать null_buffers ().

1 голос
/ 04 февраля 2012

Нет, это невозможно - если вы хотите что-то вроде peek , вы должны хранить подсчитанные байты самостоятельно.

...