void http_client::handle_connect(const boost::system::error_code& error, connection_ptr conn, tcp::resolver::iterator resolve_itor) { if(error) { std::cerr << "HANDLE_CONNECT_ERROR: " << error << std::endl; if(endpoint_iterator_ == resolve_itor) { ++endpoint_iterator_; } //ASSERT_LOG(endpoint_iterator_ != tcp::resolver::iterator(), "COULD NOT RESOLVE TBS SERVER: " << resolve_itor->endpoint().address().to_string() << ":" << resolve_itor->endpoint().port()); if(endpoint_iterator_ == tcp::resolver::iterator()) { resolution_state_ = RESOLUTION_NOT_STARTED; --in_flight_; conn->error_handler("Error establishing connection"); return; } async_connect(conn); return; } #if defined(_MSC_VER) conn->socket.set_option(boost::asio::ip::tcp::no_delay(true)); #endif //we've connected okay, mark DNS resolution as good. if(resolution_state_ != RESOLUTION_DONE) { resolution_state_ = RESOLUTION_DONE; //all those connections waiting on DNS resolution can now connect. foreach(const connection_ptr conn, connections_waiting_on_dns_) { async_connect(conn); }
void http_client::handle_resolve(const boost::system::error_code& error, tcp::resolver::iterator endpoint_iterator, connection_ptr conn) { if(!error) { endpoint_iterator_ = endpoint_iterator; // Attempt a connection to each endpoint in the list until we // successfully establish a connection. async_connect(conn); } else { --in_flight_; conn->error_handler("Error resolving connection"); } }