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().
Нет, это невозможно - если вы хотите что-то подсмотреть, вы должны хранить подсчитанные байты самостоятельно.