| [/ |
| / 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:HandleService Handle service requirements] |
| |
| A handle service must meet the requirements for an [link |
| asio.reference.IoObjectService I/O object service] with support for movability, |
| as well as the additional requirements listed below. |
| |
| In the table below, `X` denotes a handle service class, `a` and `ao` denote |
| values of type `X`, `b` and `c` denote values of type `X::implementation_type`, |
| `n` denotes a value of type `X::native_handle_type`, `ec` denotes a value of |
| type `error_code`, and `u` and `v` denote identifiers. |
| |
| [table HandleService requirements |
| [[expression] [return type] [assertion/note\npre/post-condition]] |
| [ |
| [`X::native_handle_type`] |
| [] |
| [ |
| The implementation-defined native representation of a handle. Must |
| satisfy the requirements of `CopyConstructible` types (C++ Std, 20.1.3), |
| and the requirements of `Assignable` types (C++ Std, 23.1). |
| ] |
| ] |
| [ |
| [`a.construct(b);`] |
| [] |
| [ |
| From [link asio.reference.IoObjectService IoObjectService] |
| requirements.\n |
| post: `!a.is_open(b)`. |
| ] |
| ] |
| [ |
| [`a.destroy(b);`] |
| [] |
| [ |
| From [link asio.reference.IoObjectService IoObjectService] |
| requirements. Implicitly cancels asynchronous operations, as if by calling |
| `a.close(b, ec)`. |
| ] |
| ] |
| [ |
| [`` |
| a.move_construct(b, c); |
| ``] |
| [] |
| [ |
| From [link asio.reference.IoObjectService IoObjectService] requirements. |
| The underlying native representation is moved from `c` to `b`. |
| ] |
| ] |
| [ |
| [`` |
| a.move_assign(b, ao, c); |
| ``] |
| [] |
| [ |
| From [link asio.reference.IoObjectService IoObjectService] requirements. |
| Implicitly cancels asynchronous operations associated with `b`, as if by |
| calling `a.close(b, ec)`. Then the underlying native representation is |
| moved from `c` to `b`. |
| ] |
| ] |
| [ |
| [`` |
| a.assign(b, n, ec); |
| ``] |
| [`error_code`] |
| [ |
| pre: `!a.is_open(b)`.\n |
| post: `!!ec || a.is_open(b)`. |
| ] |
| ] |
| [ |
| [`` |
| a.is_open(b); |
| ``] |
| [`bool`] |
| [ |
| ] |
| ] |
| [ |
| [`` |
| const X& u = a; |
| const X::implementation_type& v = b; |
| u.is_open(v); |
| ``] |
| [`bool`] |
| [ |
| ] |
| ] |
| [ |
| [`` |
| a.close(b, ec); |
| ``] |
| [`error_code`] |
| [ |
| If `a.is_open()` is true, causes any outstanding asynchronous operations |
| to complete as soon as possible. Handlers for cancelled operations shall |
| be passed the error code `error::operation_aborted`.\n |
| post: `!a.is_open(b)`. |
| ] |
| ] |
| [ |
| [`` |
| a.native_handle(b); |
| ``] |
| [`X::native_handle_type`] |
| [ |
| ] |
| ] |
| [ |
| [`` |
| a.cancel(b, ec); |
| ``] |
| [`error_code`] |
| [ |
| pre: `a.is_open(b)`.\n |
| Causes any outstanding asynchronous operations to complete as soon as |
| possible. Handlers for cancelled operations shall be passed the error |
| code `error::operation_aborted`. |
| ] |
| ] |
| ] |
| |
| [endsect] |