[/
 / Copyright (c) 2003-2016 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)
 /]

[section:ConnectHandler Connect handler requirements]

A connect handler must meet the requirements for a [link
asio.reference.Handler handler]. A value `h` of a connect handler
class should work correctly in the expression `h(ec)`, where `ec` is an lvalue
of type `const error_code`.

[heading Examples]

A free function as a connect handler:

  void connect_handler(
      const asio::error_code& ec)
  {
    ...
  }

A connect handler function object:

  struct connect_handler
  {
    ...
    void operator()(
        const asio::error_code& ec)
    {
      ...
    }
    ...
  };

A lambda as a connect handler:

  socket.async_connect(...,
      [](const asio::error_code& ec)
      {
        ...
      });

A non-static class member function adapted to a connect handler using
`std::bind()`:

  void my_class::connect_handler(
      const asio::error_code& ec)
  {
    ...
  }
  ...
  socket.async_connect(...,
      std::bind(&my_class::connect_handler,
        this, std::placeholders::_1));

A non-static class member function adapted to a connect handler using
`boost::bind()`:

  void my_class::connect_handler(
      const asio::error_code& ec)
  {
    ...
  }
  ...
  socket.async_connect(...,
      boost::bind(&my_class::connect_handler,
        this, asio::placeholders::error));

[endsect]
