我使用boost :: asio :: read(或者可能是等效的async_read)从套接字中读取一些数据。
我是否有可能将读取的字节留在底层套接字中,以便下次我在套接字上调用read时再次收到该数据?
答案 0 :(得分:3)
像西蒙所说,你不能用boost::asio::read()
(或boost::asio::async_read()
)来做。但是,对于read()
,您可以在套接字上调用native_handle()
以获取套接字描述符,然后将::recvmsg()
与MSG_PEEK
标志一起使用。同样,您可以使用async_read()
作为接收缓冲区调用null_buffers()
,然后使用native_handle()
/ ::recvmsg()
技巧查看数据。查看boost文档的this section,了解如何使用null_buffers()。
答案 1 :(得分:1)
不,这是不可能的 - 如果你想要一种 peek ,你必须自己存储偷看的字节。