boost::asio - заглядывать в буфер сокетов

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

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

2 ответа

Решение

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

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

Другие вопросы по тегам