#include #include #include #include #include #include "future.hpp" class Resolver { public: Resolver() : io_service_(), work_(io_service_), resolver_(io_service_), thread_(boost::bind(&boost::asio::io_service::run, &io_service_)) { } ~Resolver() { io_service_.stop(); thread_.join(); } future resolve(std::string host_name) { promise result; boost::asio::ip::tcp::resolver::query query(host_name, "0"); resolver_.async_resolve(query, boost::bind(&Resolver::handle_resolve, this, _1, _2, result)); return result; } private: void handle_resolve(boost::system::error_code ec, boost::asio::ip::tcp::resolver::iterator iterator, promise result) { if (ec) result.fail(boost::system::system_error(ec)); else result(iterator->endpoint().address().to_string()); } boost::asio::io_service io_service_; boost::asio::io_service::work work_; boost::asio::ip::tcp::resolver resolver_; boost::thread thread_; }; int main() { Resolver resolver; future result = resolver.resolve("www.boost.org"); std::cout << result() << "\n"; return 0; }