如何使用已经存在的 tcp::socket 创建 tcp::iostream?

How to create an tcp::iostream using an already existing tcp::socket?

本文关键字:tcp socket iostream 创建 何使用 存在      更新时间:2023-10-16

我什至不确定这个问题是否有意义,但我正在尝试解决以下问题,而无需重写大部分代码。

我有一个 tcp 服务器,它使用 tcp::socket 进行读写,其中包含 boost::asio::async_read_until 和 boost::asio::write 函数。现在有一个用例可以从文件流式传输到此套接字。TCP::IOstream是执行此操作的理想方法;我可以使用当前打开的 tcp::socket 创建此实例吗?

您可以像这样分配底层套接字:

#include <boost/asio.hpp>
#include <iostream>
using boost::asio::ip::tcp;
int main() {
boost::asio::io_service svc;
tcp::socket s(svc);
s.connect(tcp::endpoint {{}, 6767});
tcp::iostream stream;
stream.rdbuf()->assign(tcp::v4(), s.native_handle());
std::cout << stream.rdbuf() << std::flush;
}