boost :: asio :: ip :: tcp :: resolver :: iterator有什么作用?

Ham*_*ami 14 c++ boost boost-asio

我开始使用C++中的boost asio编程,在查看示例时,我无法理解它boost::asio::ip::tcp::resolver::iterator做了什么.

码:

boost::asio::io_service io_service;

tcp::resolver resolver(io_service);
tcp::resolver::query query(argv[1]);
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;

tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
  socket.close();
  socket.connect(*endpoint_iterator++, error);
}
Run Code Online (Sandbox Code Playgroud)

如果我的问题没有提供足够的信息,请帮助我并原谅我.

Mar*_*lon 20

boost::asio::ip::tcp::resolver::iterator 遍历您指定的主机的地址列表(主机可以有多个地址).

就像std :: string :: iterator遍历其字符一样,boost :: asio :: ip :: tcp :: resolver :: iterator遍历其地址列表.

以下代码:

while (error && endpoint_iterator != end)
{
  socket.close();
  socket.connect(*endpoint_iterator++, error);
}
Run Code Online (Sandbox Code Playgroud)

正在尝试与每个端点建立连接,直到它成功或用完端点(感谢您对Eugen Constantin Dinca进行校正).

  • @Hami`ip :: tcp :: resolver :: iterator`不是一个指针,它只是看起来和行为像一个.后缀增量运算符(`operator ++(int)`)在**间接运算符(`operator*()`)获得底层`endpoint`并将其返回到`socket :: connect()之后获取下一个迭代器**.如果连接失败,则设置`error`并继续循环.这些是标准模板库中的迭代器使用的相同概念. (6认同)
  • 实际上`while'尝试连接到每个端点,直到它成功或者用完了端点.因此,在循环结束时最多连接1个端点. (2认同)