7 boost::unique_future<boost::asio::ip::tcp::socket>
13 boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), addr,
port, boost::asio::ip::tcp::resolver::query::canonical_name);
14 boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);
15 boost::asio::ip::tcp::resolver::iterator end;
17 throw boost::system::system_error{boost::asio::error::fault,
"Failed to resolve " + addr};
23 boost::promise<boost::asio::ip::tcp::socket> result_;
26 explicit new_connection(boost::asio::io_service& io_service)
27 : result_(), socket_(io_service)
31 const auto shared = std::make_shared<new_connection>(
GET_IO_SERVICE(timeout));
32 timeout.async_wait([shared] (boost::system::error_code
error)
34 if (
error != boost::system::errc::operation_canceled && shared && shared->socket_.is_open())
36 shared->socket_.shutdown(boost::asio::ip::tcp::socket::shutdown_both);
37 shared->socket_.close();
40 shared->socket_.async_connect(*iterator, [shared] (boost::system::error_code
error)
45 shared->result_.set_exception(boost::system::system_error{error});
47 shared->result_.set_value(
std::move(shared->socket_));
50 return shared->result_.get_future();
std::unique_ptr< void, close > socket
Unique ZMQ socket handle, calls zmq_close on destruction.
boost::endian::big_uint16_t port
#define GET_IO_SERVICE(s)
const T & move(const T &t)
error
Tracks LMDB error codes.
boost::unique_future< boost::asio::ip::tcp::socket > operator()(const std::string &addr, const std::string &port, boost::asio::steady_timer &) const