Boost logo

Boost :

Subject: Re: [boost] boost::asio and resolve_async
From: Kevin Heifner (heifnerk_at_[hidden])
Date: 2012-08-16 11:18:50

On 8/16/2012 9:35 AM, david.hagood_at_[hidden] wrote:
> I was looking at needing to do a large number of reverse DNS lookups for a
> log analysis program I am writing, and wanted to use some form of async
> lookup to speed the program up (vs. doing each look up in series, at a
> couple of seconds per lookup).

Note: "An additional thread per io_service is used to emulate
asynchronous host resolution. This thread is created on the first call
to either ip::tcp::resolver::async_resolve() or
ip::udp::resolver::async_resolve()." from

> boost::asio and the async_resolve functions looked to be just what I
> wanted, BUT: I can find no good examples of a simple lookup. By "simple" I
> mean "given an address, give me the host name(s) associated with that
> address". All the examples were for a lookup by host name/transport
> type/port, e.g. host name/tcp/80. In my case I neither need a port # nor
> even have one - I just want the RDNS for the address.

namespace {
   void handle_resolve(const boost::system::error_code& ec,
boost::asio::ip::tcp::resolver::iterator ep_it) {
     if (!ec) {
       // print ip addresses
       for (boost::asio::ip::tcp::resolver::iterator end; ep_it != end;
++ep_it) {
         std::cout << ep_it->host_name() << ": " <<
ep_it->endpoint().address().to_string() << std::endl;
     } else {
       std::cerr << "Resolve error: " << ec << std::endl;

   boost::asio::io_service io_service;

   boost::asio::ip::tcp::resolver resolver(io_service);
   boost::asio::ip::tcp::resolver::query query1("", "");
   boost::asio::ip::tcp::resolver::query query2("", "");
   boost::asio::ip::tcp::resolver::query query3("", "");
   boost::asio::ip::tcp::resolver::query query4("", "");

   resolver.async_resolve(query1, boost::bind(&handle_resolve, _1, _2));
   resolver.async_resolve(query2, boost::bind(&handle_resolve, _1, _2));
   resolver.async_resolve(query3, boost::bind(&handle_resolve, _1, _2));
   resolver.async_resolve(query4, boost::bind(&handle_resolve, _1, _2));;


Kevin Heifner          heifnerk_at_[hidden]
Object Computing, Inc.

Boost list run by bdawes at, gregod at, cpdaniel at, john at