[/
 / Copyright (c) 2003-2015 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:ReadHandler Read handler requirements]

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

[heading Examples]

A free function as a read handler:

  void read_handler(
      const asio::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }

A read handler function object:

  struct read_handler
  {
    ...
    void operator()(
        const asio::error_code& ec,
        std::size_t bytes_transferred)
    {
      ...
    }
    ...
  };

A lambda as a read handler:

  socket.async_read(...
      [](const asio::error_code& ec,
        std::size_t bytes_transferred)
      {
        ...
      });

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

  void my_class::read_handler(
      const asio::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }
  ...
  socket.async_read(...,
      std::bind(&my_class::read_handler,
        this, std::placeholders::_1,
        std::placeholders::_2));

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

  void my_class::read_handler(
      const asio::error_code& ec,
      std::size_t bytes_transferred)
  {
    ...
  }
  ...
  socket.async_read(...,
      boost::bind(&my_class::read_handler,
        this, asio::placeholders::error,
        asio::placeholders::bytes_transferred));

[endsect]
