Normalmente usamos hostname para identificar o servidor remoto. Mas para nos conectarmos ao servidor, precisamos saber seu endereço IP. Para descobrir o endereço IP por trás de um nome de host específico, devemos realizar a análise. Pode haver diferentes entidades físicas que traduzem um determinado nome de host em um endereço IP: um servidor DNS remoto, seu roteador, o arquivo /etc/hosts, o serviço NETBIOS, o cache DNS do sistema operacional. No entanto, você realmente não precisa se preocupar com esses detalhes porque a API que usaremos é a mesma.
A classe usada para resolver nomes de host para endereços IP é boost::asio::ip::tcp::resolver. A função principal que precisamos é resolver::resolve ou resolver::async_resolve.
Pode haver vários endereços IP para o mesmo nome de host. Você pode escolher qualquer um deles. Este é um balanceamento de carga simples. No exemplo a seguir, analisaremos o nome de host google.com e imprimiremos os resultados na saída padrão:
#include <iostream>
#include <boost/asio.hpp>
namespace io = boost::asio;
namespace ip = io::ip;
using tcp = ip::tcp;
using error_code = boost::system::error_code;
int main()
{
io::io_context io_context;
error_code error;
tcp::resolver resolver(io_context);
tcp::resolver::results_type results = resolver.resolve("google.com", "80", error);
for(tcp::endpoint const& endpoint : results)
{
std::cout << endpoint << "\n";
}
ret