【发布时间】:2018-04-13 09:28:01
【问题描述】:
当我调用boost::asio::ip::tcp::resolver::async_resolve 时,我的处理程序会收到一个ip::tcp::resolver::iterator,它会遍历一个或多个ip::tcp::resolver::entries。 他们的寿命是多少,让他们活着的把柄是什么?
例如,如果我得到第一个 entry 并启动 tcp::async_connect 到它,那么在 async_connect 处理程序中,我可以迭代到下一个 entry 并启动另一个 async_connect 到下一个条目(当然,只要我将iterator 传递给async_connect 处理程序)?
resolver::iterator 和 resolver::entries 何时清理?我是否必须做一些特别的事情,或者只是让它们超出范围而不被任何回调闭包所持有?
(我知道我可以在我的async_resolve 处理程序中运行所有resolver::entries 并将它们存储在智能指针结构或其他任何东西中,以便我控制它们的生命周期,但如果asio::ip::tcp::resolver 已经在处理它,如果我让它完成它的工作,我的代码会更简单。)
【问题讨论】:
-
有趣的是你应该问。我回答了另一个问题earlier today,出于谨慎考虑,我避免将迭代器传递给另一个函数。我现在知道这不是必需的:)
标签: c++ sockets boost tcp boost-asio