1[/
2 / Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
3 /
4 / Distributed under the Boost Software License, Version 1.0. (See accompanying
5 / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 /]
7
8[section:SocketService Socket service requirements]
9
10A socket service must meet the requirements for an [link
11boost_asio.reference.IoObjectService I/O object service] with support for movability,
12as well as the  additional requirements listed below.
13
14In the table below, `X` denotes a socket service class for protocol [link
15boost_asio.reference.Protocol `Protocol`], `a` and `ao` denote values of type `X`,
16`b` and `c` denote values of type `X::implementation_type`, `p` denotes a value
17of type `Protocol`, `n` denotes a value of type `X::native_handle_type`, `e`
18denotes a value of type `Protocol::endpoint`, `ec` denotes a value of type
19`error_code`, `s` denotes a value meeting [link
20boost_asio.reference.SettableSocketOption `SettableSocketOption`] requirements, `g`
21denotes a value meeting [link boost_asio.reference.GettableSocketOption
22`GettableSocketOption`] requirements, `i` denotes a value meeting [link
23boost_asio.reference.IoControlCommand `IoControlCommand`] requirements, `h`
24denotes a value of type `socket_base::shutdown_type`, `ch` denotes a value
25meeting [link boost_asio.reference.ConnectHandler `ConnectHandler`]
26requirements, and `u` and `v` denote identifiers.
27
28[table SocketService requirements
29  [[expression] [return type] [assertion/note\npre/post-condition]]
30  [
31    [`X::native_handle_type`]
32    []
33    [
34      The implementation-defined native representation of a socket. Must
35      satisfy the requirements of `CopyConstructible` types (C++ Std, 20.1.3),
36      and the requirements of `Assignable` types (C++ Std, 23.1).
37    ]
38  ]
39  [
40    [`a.construct(b);`]
41    []
42    [
43      From [link boost_asio.reference.IoObjectService IoObjectService]
44      requirements.\n
45      post: `!a.is_open(b)`.
46    ]
47  ]
48  [
49    [`a.destroy(b);`]
50    []
51    [
52      From [link boost_asio.reference.IoObjectService IoObjectService]
53      requirements. Implicitly cancels asynchronous operations, as if by calling
54      `a.close(b, ec)`.
55    ]
56  ]
57  [
58    [``
59      a.move_construct(b, c);
60    ``]
61    []
62    [
63      From [link boost_asio.reference.IoObjectService IoObjectService] requirements.
64      The underlying native representation is moved from `c` to `b`.
65    ]
66  ]
67  [
68    [``
69      a.move_assign(b, ao, c);
70    ``]
71    []
72    [
73      From [link boost_asio.reference.IoObjectService IoObjectService] requirements.
74      Implicitly cancels asynchronous operations associated with `b`, as if by
75      calling `a.close(b, ec)`. Then the underlying native representation is
76      moved from `c` to `b`.
77    ]
78  ]
79  [
80    [``
81      a.open(b, p, ec);
82    ``]
83    [`error_code`]
84    [
85      pre: `!a.is_open(b)`.\n
86      post: `!!ec || a.is_open(b)`.
87    ]
88  ]
89  [
90    [``
91      a.assign(b, p, n, ec);
92    ``]
93    [`error_code`]
94    [
95      pre: `!a.is_open(b)`.\n
96      post: `!!ec || a.is_open(b)`.
97    ]
98  ]
99  [
100    [``
101      a.is_open(b);
102    ``]
103    [`bool`]
104    [
105    ]
106  ]
107  [
108    [``
109      const X& u = a;
110      const X::implementation_type& v = b;
111      u.is_open(v);
112    ``]
113    [`bool`]
114    [
115    ]
116  ]
117  [
118    [``
119      a.close(b, ec);
120    ``]
121    [`error_code`]
122    [
123      If `a.is_open()` is true, causes any outstanding asynchronous operations
124      to complete as soon as possible. Handlers for cancelled operations shall
125      be passed the error code `error::operation_aborted`.\n
126      post: `!a.is_open(b)`.
127    ]
128  ]
129  [
130    [``
131      a.native_handle(b);
132    ``]
133    [`X::native_handle_type`]
134    [
135    ]
136  ]
137  [
138    [``
139      a.cancel(b, ec);
140    ``]
141    [`error_code`]
142    [
143      pre: `a.is_open(b)`.\n
144      Causes any outstanding asynchronous operations to complete as soon as
145      possible. Handlers for cancelled operations shall be passed the error
146      code `error::operation_aborted`.
147    ]
148  ]
149  [
150    [``
151      a.set_option(b, s, ec);
152    ``]
153    [`error_code`]
154    [
155      pre: `a.is_open(b)`.
156    ]
157  ]
158  [
159    [``
160      a.get_option(b, g, ec);
161    ``]
162    [`error_code`]
163    [
164      pre: `a.is_open(b)`.
165    ]
166  ]
167  [
168    [``
169      const X& u = a;
170      const X::implementation_type& v = b;
171      u.get_option(v, g, ec);
172    ``]
173    [`error_code`]
174    [
175      pre: `a.is_open(b)`.
176    ]
177  ]
178  [
179    [``
180      a.io_control(b, i, ec);
181    ``]
182    [`error_code`]
183    [
184      pre: `a.is_open(b)`.
185    ]
186  ]
187  [
188    [``
189      a.at_mark(b, ec);
190    ``]
191    [`bool`]
192    [
193      pre: `a.is_open(b)`.
194    ]
195  ]
196  [
197    [``
198      const X& u = a;
199      const X::implementation_type& v = b;
200      u.at_mark(v, ec);
201    ``]
202    [`bool`]
203    [
204      pre: `a.is_open(b)`.
205    ]
206  ]
207  [
208    [``
209      a.available(b, ec);
210    ``]
211    [`size_t`]
212    [
213      pre: `a.is_open(b)`.
214    ]
215  ]
216  [
217    [``
218      const X& u = a;
219      const X::implementation_type& v = b;
220      u.available(v, ec);
221    ``]
222    [`size_t`]
223    [
224      pre: `a.is_open(b)`.
225    ]
226  ]
227  [
228    [``
229      const typename Protocol::endpoint& u = e;
230      a.bind(b, u, ec);
231    ``]
232    [`error_code`]
233    [
234      pre: `a.is_open(b)`.
235    ]
236  ]
237  [
238    [``
239      a.shutdown(b, h, ec);
240    ``]
241    [`error_code`]
242    [
243      pre: `a.is_open(b)`.
244    ]
245  ]
246  [
247    [``
248      a.local_endpoint(b, ec);
249    ``]
250    [`Protocol::endpoint`]
251    [
252      pre: `a.is_open(b)`.
253    ]
254  ]
255  [
256    [``
257      const X& u = a;
258      const X::implementation_type& v = b;
259      u.local_endpoint(v, ec);
260    ``]
261    [`Protocol::endpoint`]
262    [
263      pre: `a.is_open(b)`.
264    ]
265  ]
266  [
267    [``
268      a.remote_endpoint(b, ec);
269    ``]
270    [`Protocol::endpoint`]
271    [
272      pre: `a.is_open(b)`.
273    ]
274  ]
275  [
276    [``
277      const X& u = a;
278      const X::implementation_type& v = b;
279      u.remote_endpoint(v, ec);
280    ``]
281    [`Protocol::endpoint`]
282    [
283      pre: `a.is_open(b)`.
284    ]
285  ]
286  [
287    [``
288      const typename Protocol::endpoint& u = e;
289      a.connect(b, u, ec);
290    ``]
291    [`error_code`]
292    [
293      pre: `a.is_open(b)`.
294    ]
295  ]
296  [
297    [``
298      const typename Protocol::endpoint& u = e;
299      a.async_connect(b, u, ch);
300    ``]
301    []
302    [
303      pre: `a.is_open(b)`.\n
304      Initiates an asynchronous connect operation that is performed via the
305      `io_service` object `a.get_io_service()` and behaves according to [link
306      boost_asio.reference.asynchronous_operations asynchronous operation]
307      requirements.
308    ]
309  ]
310]
311
312[endsect]
313