如何将 boost::asio::tcp::io_stream 附加到我的 io_service?

How to attach a boost::asio::tcp::io_stream to my io_service?

我习惯使用 boost::asio::ip::tcp::sockets where I construct them with an io_service。这很有用,因为我有一个用于所有套接字的 io_service,并且这些套接字共享一个线程池。

现在,我正在尝试使用带有外部 io_serviceboost::asio::ip::tcp::io_stream, and I'd like it perform all asynchronous work in the same threadpool. However, it does not appear to be possible to constructtcp::io_stream。底层套接字确实使用了内部初始化的io_service。有没有办法让我继续使用集中管理的 io_servicetcp::io_stream?

我使用的是 boost 版本 1.62。

您可以将 boost::asio::ip::tcp::socket 对象设置到流缓冲区中:

Live On Coliru

#include <boost/asio.hpp>

namespace ba = boost::asio;
using ba::ip::tcp;

int main() {
    ba::io_service svc;
    tcp::socket s(svc);

    // e.g. connect to test service
    s.connect({{}, 6767});

    tcp::iostream stream;
    stream.rdbuf()->socket() = std::move(s);

    for (std::string line; getline(stream, line);) {
        std::reverse(line.begin(), line.end());
        stream << line << std::endl;
    }
}

当 运行 反对端口 6767 上的 netcat 会话时:

This is
Not so bad
After all

收到的回复是:

si sihT
dab os toN
lla retfA