如何将 boost::asio::tcp::io_stream 附加到我的 io_service?
How to attach a boost::asio::tcp::io_stream to my io_service?
我习惯使用 boost::asio::ip::tcp::socket
s where I construct them with an io_service
。这很有用,因为我有一个用于所有套接字的 io_service
,并且这些套接字共享一个线程池。
现在,我正在尝试使用带有外部 io_service
的 boost::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 construct 和 tcp::io_stream
。底层套接字确实使用了内部初始化的io_service。有没有办法让我继续使用集中管理的 io_service
和 tcp::io_stream
?
我使用的是 boost 版本 1.62。
您可以将 boost::asio::ip::tcp::socket
对象设置到流缓冲区中:
#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
我习惯使用 boost::asio::ip::tcp::socket
s where I construct them with an io_service
。这很有用,因为我有一个用于所有套接字的 io_service
,并且这些套接字共享一个线程池。
现在,我正在尝试使用带有外部 io_service
的 boost::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 construct 和 tcp::io_stream
。底层套接字确实使用了内部初始化的io_service。有没有办法让我继续使用集中管理的 io_service
和 tcp::io_stream
?
我使用的是 boost 版本 1.62。
您可以将 boost::asio::ip::tcp::socket
对象设置到流缓冲区中:
#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