I use boost::asio::read (or may be the equivalent async_read) to read some data from a socket.
Is it possible that I leave the bytes read in the underlying socket so that next time I call read on the socket I receive again that data ?
I use boost::asio::read (or may be the equivalent async_read) to read some data from a socket.
Is it possible that I leave the bytes read in the underlying socket so that next time I call read on the socket I receive again that data ?
Like Simon said, you can't do it with
boost::asio::read()
(orboost::asio::async_read()
). However, forread()
you could callnative_handle()
on the socket to get the socket descriptor and then use::recvmsg()
with theMSG_PEEK
flag. Similarly, you could callasync_read()
withnull_buffers()
as the receive buffer and then use thenative_handle()
/::recvmsg()
trick to peek the data. Check out this section of the boost documentation for how to use null_buffers().No, it is not possible - if you want a kind of peek you have to store the peeked bytes by your self.