...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Establishes a connection by trying each endpoint in a sequence asynchronously.
template< class EndpointSequence, class ConnectCondition, class RangeConnectHandler = net::default_completion_token_t<executor_type>> DEDUCED async_connect( EndpointSequence const& endpoints, ConnectCondition connect_condition, RangeConnectHandler&& handler = net::default_completion_token_t< executor_type >{});
This function attempts to connect the stream to one of a sequence of
endpoints by trying each endpoint until a connection is successfully
established. The underlying socket is automatically opened if needed.
An automatically opened socket is not returned to the closed state upon
failure. The algorithm, known as a composed asynchronous operation,
is implemented in terms of calls to the underlying socket's async_connect
function. If the timeout
timer expires while the operation is outstanding, the current connection
attempt will be canceled and the completion handler will be invoked with
the error timeout
.
Name |
Description |
---|---|
|
A sequence of endpoints. This this object must meet the requirements of EndpointSequence. |
|
A function object that is called prior to each connection attempt. The signature of the function object must be: bool connect_condition( error_code const& ec, typename Protocol::endpoint const& next);
The |
|
The completion handler to invoke when the operation completes. The implementation takes ownership of the handler by performing a decay-copy. The equivalent function signature of the handler must be: void handler( // Result of operation. if the sequence is empty, set to // net::error::not_found. Otherwise, contains the // error from the last connection attempt. error_code const& error, // On success, the successfully connected endpoint. // Otherwise, a default-constructed endpoint. typename Protocol::endpoint const& endpoint );
Regardless of whether the asynchronous operation completes
immediately or not, the handler will not be invoked from within
this function. Invocation of the handler will be performed
in a manner equivalent to using |
The following connect condition function object can be used to output information about the individual connection attempts:
struct my_connect_condition { bool operator()( error_code const& ec, net::ip::tcp::endpoint const& next) { if (ec) std::cout << "Error: " << ec.message() << std::endl; std::cout << "Trying: " << next << std::endl; return true; } };