[/
 / 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:AsyncReadStream Buffer-oriented asynchronous read stream requirements]

In the table below, `a` denotes an asynchronous read stream object, `mb`
denotes an object satisfying [link
asio.reference.MutableBufferSequence mutable buffer sequence]
requirements, and `h` denotes an object satisfying [link
asio.reference.ReadHandler read handler] requirements.

[table Buffer-oriented asynchronous read stream requirements
  [[operation] [type] [semantics, pre/post-conditions]]
  [
    [`a.get_io_service();`]
    [`io_service&`]
    [Returns the `io_service` object through which the `async_read_some`
    handler `h` will be invoked.]
  ]
  [
    [`a.async_read_some(mb, h);`]
    [`void`]
    [
      Initiates an asynchronous operation to read one or more bytes of data
      from the stream `a`. The operation is performed via the `io_service`
      object `a.get_io_service()` and behaves according to [link
      asio.reference.asynchronous_operations asynchronous operation]
      requirements.\n
      \n
      The mutable buffer sequence `mb` specifies memory where the data should
      be placed. The `async_read_some` operation shall always fill a buffer in
      the sequence completely before proceeding to the next.\n
      \n
      The implementation shall maintain one or more copies of `mb` until such
      time as the read operation no longer requires access to the memory
      specified by the buffers in the sequence. The program must ensure the
      memory is valid until:\n
      \n
      [mdash] the last copy of `mb` is destroyed, or\n
      \n
      [mdash] the handler for the asynchronous read operation is invoked,\n
      \n
      whichever comes first.\n
      \n
      If the total size of all buffers in the sequence `mb` is `0`, the
      asynchronous read operation shall complete immediately and pass `0` as
      the argument to the handler that specifies the number of bytes read.
    ]
  ]
]

[endsect]
