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
No, it is not possible - if you want a kind of peek you have to store the peeked bytes by your self.