### Requirements on asynchronous socket operations

In this library, asynchronous socket operations are those member functions having prefix `async_`.

For an object `s`, a program may initiate asynchronous socket operations such that there are multiple simultaneously outstanding asynchronous operations.

When there are multiple outstanding asynchronous read operations on `s`:

— having no argument `flags` of type `socket_base::message_flags`, or

— having an argument `flags` of type `socket_base::message_flags` but where `(flags & socket_base::message_out_of_band) == 0`

then the `buffers` are filled in the order in which these operations were issued. The order of invocation of the completion handlers for these operations is unspecified.

When there are multiple outstanding asynchronous read operations on `s` having an argument `flags` of type `socket_base::message_flags` where `(flags & socket_base::message_out_of_band) != 0` then the `buffers` are filled in the order in which these operations were issued.

When there are multiple outstanding asynchronous write operations on `s`, the `buffers` are transmitted in the order in which these operations were issued. The order of invocation of the completion handlers for these operations is unspecified.