function, this_handler->handler_);
}
- struct initiate_async_range_connect
+ template <typename Protocol, typename Executor>
+ class initiate_async_range_connect
{
- template <typename RangeConnectHandler, typename Protocol,
- typename Executor, typename EndpointSequence, typename ConnectCondition>
+ public:
+ typedef Executor executor_type;
+
+ explicit initiate_async_range_connect(basic_socket<Protocol, Executor>& s)
+ : socket_(s)
+ {
+ }
+
+ executor_type get_executor() const BOOST_ASIO_NOEXCEPT
+ {
+ return socket_.get_executor();
+ }
+
+ template <typename RangeConnectHandler,
+ typename EndpointSequence, typename ConnectCondition>
void operator()(BOOST_ASIO_MOVE_ARG(RangeConnectHandler) handler,
- basic_socket<Protocol, Executor>* s, const EndpointSequence& endpoints,
+ const EndpointSequence& endpoints,
const ConnectCondition& connect_condition) const
{
// If you get an error on the following line it means that your
non_const_lvalue<RangeConnectHandler> handler2(handler);
range_connect_op<Protocol, Executor, EndpointSequence, ConnectCondition,
- typename decay<RangeConnectHandler>::type>(*s, endpoints,
+ typename decay<RangeConnectHandler>::type>(socket_, endpoints,
connect_condition, handler2.value)(boost::system::error_code(), 1);
}
+
+ private:
+ basic_socket<Protocol, Executor>& socket_;
};
template <typename Protocol, typename Executor, typename Iterator,
function, this_handler->handler_);
}
- struct initiate_async_iterator_connect
+ template <typename Protocol, typename Executor>
+ class initiate_async_iterator_connect
{
- template <typename IteratorConnectHandler, typename Protocol,
- typename Executor, typename Iterator, typename ConnectCondition>
+ public:
+ typedef Executor executor_type;
+
+ explicit initiate_async_iterator_connect(
+ basic_socket<Protocol, Executor>& s)
+ : socket_(s)
+ {
+ }
+
+ executor_type get_executor() const BOOST_ASIO_NOEXCEPT
+ {
+ return socket_.get_executor();
+ }
+
+ template <typename IteratorConnectHandler,
+ typename Iterator, typename ConnectCondition>
void operator()(BOOST_ASIO_MOVE_ARG(IteratorConnectHandler) handler,
- basic_socket<Protocol, Executor>* s, Iterator begin,
- Iterator end, const ConnectCondition& connect_condition) const
+ Iterator begin, Iterator end,
+ const ConnectCondition& connect_condition) const
{
// If you get an error on the following line it means that your
// handler does not meet the documented type requirements for an
non_const_lvalue<IteratorConnectHandler> handler2(handler);
iterator_connect_op<Protocol, Executor, Iterator, ConnectCondition,
- typename decay<IteratorConnectHandler>::type>(*s, begin, end,
+ typename decay<IteratorConnectHandler>::type>(socket_, begin, end,
connect_condition, handler2.value)(boost::system::error_code(), 1);
}
+
+ private:
+ basic_socket<Protocol, Executor>& socket_;
};
} // namespace detail
#endif // !defined(GENERATING_DOCUMENTATION)
-template <typename Protocol, typename Executor,
- typename EndpointSequence, typename RangeConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(RangeConnectHandler,
+template <typename Protocol, typename Executor, typename EndpointSequence,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ typename Protocol::endpoint)) RangeConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(RangeConnectHandler,
void (boost::system::error_code, typename Protocol::endpoint))
async_connect(basic_socket<Protocol, Executor>& s,
const EndpointSequence& endpoints,
{
return async_initiate<RangeConnectHandler,
void (boost::system::error_code, typename Protocol::endpoint)>(
- detail::initiate_async_range_connect(), handler,
- &s, endpoints, detail::default_connect_condition());
+ detail::initiate_async_range_connect<Protocol, Executor>(s),
+ handler, endpoints, detail::default_connect_condition());
}
#if !defined(BOOST_ASIO_NO_DEPRECATED)
-template <typename Protocol, typename Executor,
- typename Iterator, typename IteratorConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
+template <typename Protocol, typename Executor, typename Iterator,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ Iterator)) IteratorConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
void (boost::system::error_code, Iterator))
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
BOOST_ASIO_MOVE_ARG(IteratorConnectHandler) handler,
{
return async_initiate<IteratorConnectHandler,
void (boost::system::error_code, Iterator)>(
- detail::initiate_async_iterator_connect(), handler,
- &s, begin, Iterator(), detail::default_connect_condition());
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
+ handler, begin, Iterator(), detail::default_connect_condition());
}
#endif // !defined(BOOST_ASIO_NO_DEPRECATED)
-template <typename Protocol, typename Executor,
- typename Iterator, typename IteratorConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
+template <typename Protocol, typename Executor, typename Iterator,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ Iterator)) IteratorConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
void (boost::system::error_code, Iterator))
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin, Iterator end,
BOOST_ASIO_MOVE_ARG(IteratorConnectHandler) handler)
{
return async_initiate<IteratorConnectHandler,
void (boost::system::error_code, Iterator)>(
- detail::initiate_async_iterator_connect(), handler,
- &s, begin, end, detail::default_connect_condition());
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
+ handler, begin, end, detail::default_connect_condition());
}
-template <typename Protocol, typename Executor, typename EndpointSequence,
- typename ConnectCondition, typename RangeConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(RangeConnectHandler,
+template <typename Protocol, typename Executor,
+ typename EndpointSequence, typename ConnectCondition,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ typename Protocol::endpoint)) RangeConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(RangeConnectHandler,
void (boost::system::error_code, typename Protocol::endpoint))
async_connect(basic_socket<Protocol, Executor>& s,
const EndpointSequence& endpoints, ConnectCondition connect_condition,
{
return async_initiate<RangeConnectHandler,
void (boost::system::error_code, typename Protocol::endpoint)>(
- detail::initiate_async_range_connect(),
- handler, &s, endpoints, connect_condition);
+ detail::initiate_async_range_connect<Protocol, Executor>(s),
+ handler, endpoints, connect_condition);
}
#if !defined(BOOST_ASIO_NO_DEPRECATED)
-template <typename Protocol, typename Executor, typename Iterator,
- typename ConnectCondition, typename IteratorConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
+template <typename Protocol, typename Executor,
+ typename Iterator, typename ConnectCondition,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ Iterator)) IteratorConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
void (boost::system::error_code, Iterator))
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
ConnectCondition connect_condition,
{
return async_initiate<IteratorConnectHandler,
void (boost::system::error_code, Iterator)>(
- detail::initiate_async_iterator_connect(),
- handler, &s, begin, Iterator(), connect_condition);
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
+ handler, begin, Iterator(), connect_condition);
}
#endif // !defined(BOOST_ASIO_NO_DEPRECATED)
-template <typename Protocol, typename Executor, typename Iterator,
- typename ConnectCondition, typename IteratorConnectHandler>
-inline BOOST_ASIO_INITFN_RESULT_TYPE(IteratorConnectHandler,
+template <typename Protocol, typename Executor,
+ typename Iterator, typename ConnectCondition,
+ BOOST_ASIO_COMPLETION_TOKEN_FOR(void (boost::system::error_code,
+ Iterator)) IteratorConnectHandler>
+inline BOOST_ASIO_INITFN_AUTO_RESULT_TYPE(IteratorConnectHandler,
void (boost::system::error_code, Iterator))
async_connect(basic_socket<Protocol, Executor>& s, Iterator begin,
Iterator end, ConnectCondition connect_condition,
{
return async_initiate<IteratorConnectHandler,
void (boost::system::error_code, Iterator)>(
- detail::initiate_async_iterator_connect(),
- handler, &s, begin, end, connect_condition);
+ detail::initiate_async_iterator_connect<Protocol, Executor>(s),
+ handler, begin, end, connect_condition);
}
} // namespace asio