mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-08-08 09:01:48 +02:00
bin
cmake
module
Base
Core
Entity
Library
Misc
Vendor
AES256
ASIO
include
asio
detail
execution
experimental
generic
impl
ip
local
posix
ssl
traits
ts
windows
any_io_executor.hpp
associated_allocator.hpp
associated_executor.hpp
async_result.hpp
awaitable.hpp
basic_datagram_socket.hpp
basic_deadline_timer.hpp
basic_io_object.hpp
basic_raw_socket.hpp
basic_seq_packet_socket.hpp
basic_serial_port.hpp
basic_signal_set.hpp
basic_socket.hpp
basic_socket_acceptor.hpp
basic_socket_iostream.hpp
basic_socket_streambuf.hpp
basic_stream_socket.hpp
basic_streambuf.hpp
basic_streambuf_fwd.hpp
basic_waitable_timer.hpp
bind_executor.hpp
buffer.hpp
buffered_read_stream.hpp
buffered_read_stream_fwd.hpp
buffered_stream.hpp
buffered_stream_fwd.hpp
buffered_write_stream.hpp
buffered_write_stream_fwd.hpp
buffers_iterator.hpp
co_spawn.hpp
completion_condition.hpp
compose.hpp
connect.hpp
coroutine.hpp
deadline_timer.hpp
defer.hpp
detached.hpp
dispatch.hpp
error.hpp
error_code.hpp
execution.hpp
execution_context.hpp
executor.hpp
executor_work_guard.hpp
handler_alloc_hook.hpp
handler_continuation_hook.hpp
handler_invoke_hook.hpp
high_resolution_timer.hpp
io_context.hpp
io_context_strand.hpp
io_service.hpp
io_service_strand.hpp
is_applicable_property.hpp
is_executor.hpp
is_read_buffered.hpp
is_write_buffered.hpp
multiple_exceptions.hpp
packaged_task.hpp
placeholders.hpp
post.hpp
prefer.hpp
query.hpp
read.hpp
read_at.hpp
read_until.hpp
redirect_error.hpp
require.hpp
require_concept.hpp
serial_port.hpp
serial_port_base.hpp
signal_set.hpp
socket_base.hpp
spawn.hpp
ssl.hpp
static_thread_pool.hpp
steady_timer.hpp
strand.hpp
streambuf.hpp
system_context.hpp
system_error.hpp
system_executor.hpp
system_timer.hpp
this_coro.hpp
thread.hpp
thread_pool.hpp
time_traits.hpp
unyield.hpp
use_awaitable.hpp
use_future.hpp
uses_executor.hpp
version.hpp
wait_traits.hpp
write.hpp
write_at.hpp
yield.hpp
Makefile.am
asio.hpp
src
COPYING
INSTALL
LICENSE_1_0.txt
Makefile.am
README
asio.manifest
autogen.sh
boost_asio.manifest
boostify.pl
configure.ac
release.pl
tsify.pl
B64
CPR
CURL
CivetWeb
ConcurrentQueue
Fmt
Hash
MDBC
MaxmindDB
PUGIXML
SQLite
SimpleIni
SimpleSocket
SleepyDiscord
TinyDir
WebSocketPP
Whirlpool
ZLib
CMakeLists.txt
CMakeLists.txt
Core.cpp
Core.hpp
Logger.cpp
Logger.hpp
Main.cpp
Register.cpp
SqBase.hpp
sdk
.gitignore
.gitmodules
CMakeLists.txt
LICENSE
README.md
1077 lines
41 KiB
C++
1077 lines
41 KiB
C++
//
|
|
// connect.hpp
|
|
// ~~~~~~~~~~~
|
|
//
|
|
// Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
//
|
|
|
|
#ifndef ASIO_CONNECT_HPP
|
|
#define ASIO_CONNECT_HPP
|
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1200)
|
|
# pragma once
|
|
#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
|
|
|
|
#include "asio/detail/config.hpp"
|
|
#include "asio/async_result.hpp"
|
|
#include "asio/basic_socket.hpp"
|
|
#include "asio/detail/type_traits.hpp"
|
|
#include "asio/error.hpp"
|
|
|
|
#include "asio/detail/push_options.hpp"
|
|
|
|
namespace asio {
|
|
|
|
namespace detail
|
|
{
|
|
char (&has_iterator_helper(...))[2];
|
|
|
|
template <typename T>
|
|
char has_iterator_helper(T*, typename T::iterator* = 0);
|
|
|
|
template <typename T>
|
|
struct has_iterator_typedef
|
|
{
|
|
enum { value = (sizeof((has_iterator_helper)((T*)(0))) == 1) };
|
|
};
|
|
} // namespace detail
|
|
|
|
/// Type trait used to determine whether a type is an endpoint sequence that can
|
|
/// be used with with @c connect and @c async_connect.
|
|
template <typename T>
|
|
struct is_endpoint_sequence
|
|
{
|
|
#if defined(GENERATING_DOCUMENTATION)
|
|
/// The value member is true if the type may be used as an endpoint sequence.
|
|
static const bool value;
|
|
#else
|
|
enum
|
|
{
|
|
value = detail::has_iterator_typedef<T>::value
|
|
};
|
|
#endif
|
|
};
|
|
|
|
/**
|
|
* @defgroup connect asio::connect
|
|
*
|
|
* @brief The @c connect function is a composed operation that establishes a
|
|
* socket connection by trying each endpoint in a sequence.
|
|
*/
|
|
/*@{*/
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @returns The successfully connected endpoint.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @par Example
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
* asio::connect(s, r.resolve(q)); @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename EndpointSequence>
|
|
typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints,
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, the successfully connected endpoint. Otherwise, a
|
|
* default-constructed endpoint.
|
|
*
|
|
* @par Example
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
* asio::error_code ec;
|
|
* asio::connect(s, r.resolve(q), ec);
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename EndpointSequence>
|
|
typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints, asio::error_code& ec,
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
#if !defined(ASIO_NO_DEPRECATED)
|
|
/// (Deprecated: Use range overload.) Establishes a socket connection by trying
|
|
/// each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
|
|
/// (Deprecated: Use range overload.) Establishes a socket connection by trying
|
|
/// each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s,
|
|
Iterator begin, asio::error_code& ec,
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
#endif // !defined(ASIO_NO_DEPRECATED)
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @returns An iterator denoting the successfully connected endpoint.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @par Example
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::resolver::results_type e = r.resolve(q);
|
|
* tcp::socket s(my_context);
|
|
* asio::connect(s, e.begin(), e.end()); @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s,
|
|
Iterator begin, Iterator end);
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @par Example
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::resolver::results_type e = r.resolve(q);
|
|
* tcp::socket s(my_context);
|
|
* asio::error_code ec;
|
|
* asio::connect(s, e.begin(), e.end(), ec);
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s,
|
|
Iterator begin, Iterator end, asio::error_code& ec);
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @returns The successfully connected endpoint.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
* tcp::endpoint e = asio::connect(s,
|
|
* r.resolve(q), my_connect_condition());
|
|
* std::cout << "Connected to: " << e << std::endl; @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename EndpointSequence, typename ConnectCondition>
|
|
typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints, ConnectCondition connect_condition,
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, the successfully connected endpoint. Otherwise, a
|
|
* default-constructed endpoint.
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
* asio::error_code ec;
|
|
* tcp::endpoint e = asio::connect(s,
|
|
* r.resolve(q), my_connect_condition(), ec);
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* }
|
|
* else
|
|
* {
|
|
* std::cout << "Connected to: " << e << std::endl;
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename EndpointSequence, typename ConnectCondition>
|
|
typename Protocol::endpoint connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints, ConnectCondition connect_condition,
|
|
asio::error_code& ec,
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
#if !defined(ASIO_NO_DEPRECATED)
|
|
/// (Deprecated: Use range overload.) Establishes a socket connection by trying
|
|
/// each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s,
|
|
Iterator begin, ConnectCondition connect_condition,
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
|
|
/// (Deprecated: Use range overload.) Establishes a socket connection by trying
|
|
/// each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
ConnectCondition connect_condition, asio::error_code& ec,
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
#endif // !defined(ASIO_NO_DEPRECATED)
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @returns An iterator denoting the successfully connected endpoint.
|
|
*
|
|
* @throws asio::system_error Thrown on failure. If the sequence is
|
|
* empty, the associated @c error_code is asio::error::not_found.
|
|
* Otherwise, contains the error from the last connection attempt.
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::resolver::results_type e = r.resolve(q);
|
|
* tcp::socket s(my_context);
|
|
* tcp::resolver::results_type::iterator i = asio::connect(
|
|
* s, e.begin(), e.end(), my_connect_condition());
|
|
* std::cout << "Connected to: " << i->endpoint() << std::endl; @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
Iterator end, ConnectCondition connect_condition);
|
|
|
|
/// Establishes a socket connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c connect member
|
|
* function, once for each endpoint in the sequence, until a connection is
|
|
* successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param ec Set to indicate what error occurred, if any. If the sequence is
|
|
* empty, set to asio::error::not_found. Otherwise, contains the error
|
|
* from the last connection attempt.
|
|
*
|
|
* @returns On success, an iterator denoting the successfully connected
|
|
* endpoint. Otherwise, the end iterator.
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::resolver::results_type e = r.resolve(q);
|
|
* tcp::socket s(my_context);
|
|
* asio::error_code ec;
|
|
* tcp::resolver::results_type::iterator i = asio::connect(
|
|
* s, e.begin(), e.end(), my_connect_condition());
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* }
|
|
* else
|
|
* {
|
|
* std::cout << "Connected to: " << i->endpoint() << std::endl;
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition>
|
|
Iterator connect(basic_socket<Protocol, Executor>& s,
|
|
Iterator begin, Iterator end, ConnectCondition connect_condition,
|
|
asio::error_code& ec);
|
|
|
|
/*@}*/
|
|
|
|
/**
|
|
* @defgroup async_connect asio::async_connect
|
|
*
|
|
* @brief The @c async_connect function is a composed asynchronous operation
|
|
* that establishes a socket connection by trying each endpoint in a sequence.
|
|
*/
|
|
/*@{*/
|
|
|
|
/// Asynchronously establishes a socket connection by trying each endpoint in a
|
|
/// sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, the successfully connected endpoint.
|
|
* // Otherwise, a default-constructed endpoint.
|
|
* const typename Protocol::endpoint& endpoint
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @par Example
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
*
|
|
* // ...
|
|
*
|
|
* r.async_resolve(q, resolve_handler);
|
|
*
|
|
* // ...
|
|
*
|
|
* void resolve_handler(
|
|
* const asio::error_code& ec,
|
|
* tcp::resolver::results_type results)
|
|
* {
|
|
* if (!ec)
|
|
* {
|
|
* asio::async_connect(s, results, connect_handler);
|
|
* }
|
|
* }
|
|
*
|
|
* // ...
|
|
*
|
|
* void connect_handler(
|
|
* const asio::error_code& ec,
|
|
* const tcp::endpoint& endpoint)
|
|
* {
|
|
* // ...
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename EndpointSequence,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
typename Protocol::endpoint)) RangeConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(RangeConnectHandler,
|
|
void (asio::error_code, typename Protocol::endpoint))
|
|
async_connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints,
|
|
ASIO_MOVE_ARG(RangeConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor),
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
#if !defined(ASIO_NO_DEPRECATED)
|
|
/// (Deprecated: Use range overload.) Asynchronously establishes a socket
|
|
/// connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, an iterator denoting the successfully
|
|
* // connected endpoint. Otherwise, the end iterator.
|
|
* Iterator iterator
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
Iterator)) IteratorConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
|
|
void (asio::error_code, Iterator))
|
|
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
ASIO_MOVE_ARG(IteratorConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor),
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
#endif // !defined(ASIO_NO_DEPRECATED)
|
|
|
|
/// Asynchronously establishes a socket connection by trying each endpoint in a
|
|
/// sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, an iterator denoting the successfully
|
|
* // connected endpoint. Otherwise, the end iterator.
|
|
* Iterator iterator
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @par Example
|
|
* @code std::vector<tcp::endpoint> endpoints = ...;
|
|
* tcp::socket s(my_context);
|
|
* asio::async_connect(s,
|
|
* endpoints.begin(), endpoints.end(),
|
|
* connect_handler);
|
|
*
|
|
* // ...
|
|
*
|
|
* void connect_handler(
|
|
* const asio::error_code& ec,
|
|
* std::vector<tcp::endpoint>::iterator i)
|
|
* {
|
|
* // ...
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor, typename Iterator,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
Iterator)) IteratorConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
|
|
void (asio::error_code, Iterator))
|
|
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin, Iterator end,
|
|
ASIO_MOVE_ARG(IteratorConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor));
|
|
|
|
/// Asynchronously establishes a socket connection by trying each endpoint in a
|
|
/// sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param endpoints A sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, an iterator denoting the successfully
|
|
* // connected endpoint. Otherwise, the end iterator.
|
|
* Iterator iterator
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
*
|
|
* // ...
|
|
*
|
|
* r.async_resolve(q, resolve_handler);
|
|
*
|
|
* // ...
|
|
*
|
|
* void resolve_handler(
|
|
* const asio::error_code& ec,
|
|
* tcp::resolver::results_type results)
|
|
* {
|
|
* if (!ec)
|
|
* {
|
|
* asio::async_connect(s, results,
|
|
* my_connect_condition(),
|
|
* connect_handler);
|
|
* }
|
|
* }
|
|
*
|
|
* // ...
|
|
*
|
|
* void connect_handler(
|
|
* const asio::error_code& ec,
|
|
* const tcp::endpoint& endpoint)
|
|
* {
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* }
|
|
* else
|
|
* {
|
|
* std::cout << "Connected to: " << endpoint << std::endl;
|
|
* }
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename EndpointSequence, typename ConnectCondition,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
typename Protocol::endpoint)) RangeConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(RangeConnectHandler,
|
|
void (asio::error_code, typename Protocol::endpoint))
|
|
async_connect(basic_socket<Protocol, Executor>& s,
|
|
const EndpointSequence& endpoints, ConnectCondition connect_condition,
|
|
ASIO_MOVE_ARG(RangeConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor),
|
|
typename enable_if<is_endpoint_sequence<
|
|
EndpointSequence>::value>::type* = 0);
|
|
|
|
#if !defined(ASIO_NO_DEPRECATED)
|
|
/// (Deprecated: Use range overload.) Asynchronously establishes a socket
|
|
/// connection by trying each endpoint in a sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, an iterator denoting the successfully
|
|
* // connected endpoint. Otherwise, the end iterator.
|
|
* Iterator iterator
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @note This overload assumes that a default constructed object of type @c
|
|
* Iterator represents the end of the sequence. This is a valid assumption for
|
|
* iterator types such as @c asio::ip::tcp::resolver::iterator.
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
Iterator)) IteratorConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
|
|
void (asio::error_code, Iterator))
|
|
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
ConnectCondition connect_condition,
|
|
ASIO_MOVE_ARG(IteratorConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor),
|
|
typename enable_if<!is_endpoint_sequence<Iterator>::value>::type* = 0);
|
|
#endif // !defined(ASIO_NO_DEPRECATED)
|
|
|
|
/// Asynchronously establishes a socket connection by trying each endpoint in a
|
|
/// sequence.
|
|
/**
|
|
* This function attempts to connect a socket to one of a sequence of
|
|
* endpoints. It does this by repeated calls to the socket's @c async_connect
|
|
* member function, once for each endpoint in the sequence, until a connection
|
|
* is successfully established.
|
|
*
|
|
* @param s The socket to be connected. If the socket is already open, it will
|
|
* be closed.
|
|
*
|
|
* @param begin An iterator pointing to the start of a sequence of endpoints.
|
|
*
|
|
* @param end An iterator pointing to the end of a sequence of endpoints.
|
|
*
|
|
* @param connect_condition A function object that is called prior to each
|
|
* connection attempt. The signature of the function object must be:
|
|
* @code bool connect_condition(
|
|
* const asio::error_code& ec,
|
|
* const typename Protocol::endpoint& next); @endcode
|
|
* The @c ec parameter contains the result from the most recent connect
|
|
* operation. Before the first connection attempt, @c ec is always set to
|
|
* indicate success. The @c next parameter is the next endpoint to be tried.
|
|
* The function object should return true if the next endpoint should be tried,
|
|
* and false if it should be skipped.
|
|
*
|
|
* @param handler The handler to be called when the connect operation
|
|
* completes. Copies will be made of the handler as required. The function
|
|
* signature of the handler must be:
|
|
* @code void handler(
|
|
* // Result of operation. if the sequence is empty, set to
|
|
* // asio::error::not_found. Otherwise, contains the
|
|
* // error from the last connection attempt.
|
|
* const asio::error_code& error,
|
|
*
|
|
* // On success, an iterator denoting the successfully
|
|
* // connected endpoint. Otherwise, the end iterator.
|
|
* Iterator iterator
|
|
* ); @endcode
|
|
* Regardless of whether the asynchronous operation completes immediately or
|
|
* not, the handler will not be invoked from within this function. On
|
|
* immediate completion, invocation of the handler will be performed in a
|
|
* manner equivalent to using asio::post().
|
|
*
|
|
* @par Example
|
|
* The following connect condition function object can be used to output
|
|
* information about the individual connection attempts:
|
|
* @code struct my_connect_condition
|
|
* {
|
|
* bool operator()(
|
|
* const asio::error_code& ec,
|
|
* const::tcp::endpoint& next)
|
|
* {
|
|
* if (ec) std::cout << "Error: " << ec.message() << std::endl;
|
|
* std::cout << "Trying: " << next << std::endl;
|
|
* return true;
|
|
* }
|
|
* }; @endcode
|
|
* It would be used with the asio::connect function as follows:
|
|
* @code tcp::resolver r(my_context);
|
|
* tcp::resolver::query q("host", "service");
|
|
* tcp::socket s(my_context);
|
|
*
|
|
* // ...
|
|
*
|
|
* r.async_resolve(q, resolve_handler);
|
|
*
|
|
* // ...
|
|
*
|
|
* void resolve_handler(
|
|
* const asio::error_code& ec,
|
|
* tcp::resolver::iterator i)
|
|
* {
|
|
* if (!ec)
|
|
* {
|
|
* tcp::resolver::iterator end;
|
|
* asio::async_connect(s, i, end,
|
|
* my_connect_condition(),
|
|
* connect_handler);
|
|
* }
|
|
* }
|
|
*
|
|
* // ...
|
|
*
|
|
* void connect_handler(
|
|
* const asio::error_code& ec,
|
|
* tcp::resolver::iterator i)
|
|
* {
|
|
* if (ec)
|
|
* {
|
|
* // An error occurred.
|
|
* }
|
|
* else
|
|
* {
|
|
* std::cout << "Connected to: " << i->endpoint() << std::endl;
|
|
* }
|
|
* } @endcode
|
|
*/
|
|
template <typename Protocol, typename Executor,
|
|
typename Iterator, typename ConnectCondition,
|
|
ASIO_COMPLETION_TOKEN_FOR(void (asio::error_code,
|
|
Iterator)) IteratorConnectHandler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN_TYPE(Executor)>
|
|
ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
|
|
void (asio::error_code, Iterator))
|
|
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
|
|
Iterator end, ConnectCondition connect_condition,
|
|
ASIO_MOVE_ARG(IteratorConnectHandler) handler
|
|
ASIO_DEFAULT_COMPLETION_TOKEN(Executor));
|
|
|
|
/*@}*/
|
|
|
|
} // namespace asio
|
|
|
|
#include "asio/detail/pop_options.hpp"
|
|
|
|
#include "asio/impl/connect.hpp"
|
|
|
|
#endif
|