boost::asio - peeking into a socket buffer(boost::asio - 窥视套接字缓冲区)
问题描述
我使用 boost::asio::read (或者可能是等效的 async_read) 从套接字读取一些数据.
I use boost::asio::read (or may be the equivalent async_read) to read some data from a socket.
是否可以将读取的字节保留在底层套接字中,以便下次在套接字上调用 read 时再次收到该数据?
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 ?
推荐答案
就像 Simon 说的,你不能用 boost::asio::read()
(或 boost::asio::async_read()
).但是,对于 read()
您可以在套接字上调用 native_handle()
以获取套接字描述符,然后将 ::recvmsg()
与MSG_PEEK
标志.同样,您可以使用 null_buffers()
作为接收缓冲区调用 async_read()
,然后使用 native_handle()
/::recvmsg()
技巧来查看数据.查看 本节关于如何使用 null_buffers() 的 boost 文档.
Like Simon said, you can't do it with boost::asio::read()
(or boost::asio::async_read()
). However, for read()
you could call native_handle()
on the socket to get the socket descriptor and then use ::recvmsg()
with the MSG_PEEK
flag. Similarly, you could call async_read()
with null_buffers()
as the receive buffer and then use the native_handle()
/::recvmsg()
trick to peek the data. Check out this section of the boost documentation for how to use null_buffers().
这篇关于boost::asio - 窥视套接字缓冲区的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:boost::asio - 窥视套接字缓冲区
基础教程推荐
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 从 std::cin 读取密码 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- Windows Media Foundation 录制音频 2021-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01