c++ 什么替代了asio::tcp::resolver::query?

gkl3eglg  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(152)

我目前正在尝试构建一个没有任何过时方法的项目,并遇到了解析器的问题。我的旧代码看起来像这样:

  1. const asio::ip::tcp::resolver::query query(params.host, std::to_string(params.port));
  2. m_resolver.async_resolve(query, [&](const std::error_code &ec_, asio::ip::tcp::resolver::iterator iter) {
  3. if (ec_) {
  4. ec = ec_;
  5. return;
  6. }
  7. while (iter != asio::ip::tcp::resolver::iterator()) {
  8. m_socket.reset(new asio::generic::stream_protocol::socket(m_service));
  9. m_socket->async_connect((*iter++).endpoint(), [&](const std::error_code &err_code) {
  10. if (err_code) {
  11. ec = err_code;
  12. return;
  13. }
  14. connected = true;
  15. });
  16. };
  17. });

字符串
但是现在Asio说asio::tcp::resolver::query已弃用。现在主机名解析是如何完成的?

bbuxkriu

bbuxkriu1#

没有什么可以取代它。看看documentation of [async_]resolve就知道该用什么了:


的数据
基本上,“参数对象”被“内联”到单独的参数。

gg0vcinb

gg0vcinb2#

这确实很令人困惑。但是resolve()作为几个重载,some of which are deprecated and some overloads are not。甚至是Asio / Boost Asio存储库的一部分的示例仍然使用弃用的查询。这当然无助于采用。
为了完整起见,这可能是使用Asio库的新方式(非增强版本):

  1. asio::io_context io_context;
  2. std::string hostname, protocol;
  3. // Resolve host
  4. asio::ip::tcp::resolver resolver(io_context);
  5. asio::ip::basic_resolver<asio::ip::tcp>::results_type result = resolver.resolve(hostname, protocol);
  6. // Connect
  7. asio::ip::tcp::socket socket(io_context);
  8. asio::connect(socket, result);

字符串
希望这能帮助别人!

相关问题