Imported Upstream version 1.72.0
[platform/upstream/boost.git] / doc / html / boost_asio / history.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Revision History</title>
5 <link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../boost_asio.html" title="Boost.Asio">
8 <link rel="up" href="../boost_asio.html" title="Boost.Asio">
9 <link rel="prev" href="net_ts.html" title="Networking TS compatibility">
10 <link rel="next" href="index.html" title="">
11 </head>
12 <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13 <table cellpadding="2" width="100%"><tr>
14 <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
15 <td align="center"><a href="../../../index.html">Home</a></td>
16 <td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
17 <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18 <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19 <td align="center"><a href="../../../more/index.htm">More</a></td>
20 </tr></table>
21 <hr>
22 <div class="spirit-nav">
23 <a accesskey="p" href="net_ts.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_asio.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../boost_asio.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="index.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
24 </div>
25 <div class="section">
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="boost_asio.history"></a><a class="link" href="history.html" title="Revision History">Revision History</a>
28 </h2></div></div></div>
29 <h4>
30 <a name="boost_asio.history.h0"></a>
31       <span class="phrase"><a name="boost_asio.history.asio_1_16_0___boost_1_72"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_16_0___boost_1_72">Asio
32       1.16.0 / Boost 1.72</a>
33     </h4>
34 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
35 <li class="listitem">
36           Changed the <code class="computeroutput">async_initiate</code> helper function to automatically
37           deduce its return type. This is enabled for C++11 or later.
38         </li>
39 <li class="listitem">
40           Changed all asynchronous operations to use automatically deduced return
41           types. This allows completion token implementations to incorporate the
42           asynchronous operation initiation into the initiating function's return
43           type, without type erasure. Note that C++14 or later is required to support
44           completion tokens that use per-operation return type deduction. For C++11
45           or earlier, a completion token's async_result specialisation must still
46           provide the nested typedef <code class="computeroutput">return_type</code>.
47         </li>
48 <li class="listitem">
49           Introduced three new concepts to support <code class="computeroutput">async_initiate</code>.
50           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
51 <li class="listitem">
52                 <code class="computeroutput">completion_signature&lt;T&gt;</code>: Checks if <code class="computeroutput">T</code>
53                 is a signature of the form <code class="computeroutput">R(Args...)</code>.
54               </li>
55 <li class="listitem">
56                 <code class="computeroutput">completion_handler_for&lt;T, Signature&gt;</code>: Checks if
57                 <code class="computeroutput">T</code> is usable as a completion handler with the specified
58                 signature.
59               </li>
60 <li class="listitem">
61                 <code class="computeroutput">completion_token_for&lt;T, Signature&gt;</code>: Checks if
62                 <code class="computeroutput">T</code> is a completion token that can be used with async_initiate
63                 and the specified signature.
64               </li>
65 <li class="listitem">
66                 For backward compatibility with pre-concepts C++, the macros <code class="computeroutput">BOOST_ASIO_COMPLETION_SIGNATURE</code>,
67                 <code class="computeroutput">BOOST_ASIO_COMPLETION_HANDLER_FOR</code>, and <code class="computeroutput">BOOST_ASIO_COMPLETION_TOKEN_FOR</code>
68                 are provided. These macros expand to <code class="computeroutput">typename</code> when concepts
69                 are unsupported.
70               </li>
71 </ul></div>
72         </li>
73 <li class="listitem">
74           Added the nested template type <code class="computeroutput">rebind_executor</code> to all I/O
75           object types, as a way to generically rebind them to use alternative I/O
76           executors. For example:
77 <pre class="programlisting">using my_socket_type = tcp::socket::rebind_executor&lt;my_executor_type&gt;::other;
78 </pre>
79           <br>
80         </li>
81 <li class="listitem">
82           Changed the asynchronous operations' initiation function objects to report
83           their associated I/O executor via the nested type <code class="computeroutput">executor_type</code>
84           and member function <code class="computeroutput">get_executor()</code>. Note that the presence
85           of <code class="computeroutput">executor_type</code> and <code class="computeroutput">get_executor()</code> should be
86           treated as optional, and consequently it may be preferable to access them
87           via the <code class="computeroutput">associated_executor</code> trait and the <code class="computeroutput">get_associated_executor()</code>
88           helper function.
89         </li>
90 <li class="listitem">
91           Added the <code class="computeroutput">default_completion_token</code> trait, so that every I/O
92           executor type now has an associated default completion token type. This
93           trait may be used in asynchronous operation declarations as follows:
94 <pre class="programlisting">template &lt;
95     typename IoObject,
96     typename CompletionToken =
97       typename default_completion_token&lt;
98         typename IoObject::executor_type
99       &gt;::type
100   &gt;
101 auto async_fyz(
102     IoObject&amp; io_object,
103     CompletionToken&amp;&amp; token =
104       typename default_completion_token&lt;
105         typename IoObject::executor_type
106       &gt;::type{}
107   );
108 </pre>
109           <br> If not specialised, this trait type is <code class="computeroutput">void</code>, meaning
110           no default completion token type is available for the given I/O executor.
111         </li>
112 <li class="listitem">
113           Specialised the <code class="computeroutput">default_completion_token</code> trait for the <code class="computeroutput">use_awaitable</code>
114           completion token, so that it may be used as shown in the following example:
115 <pre class="programlisting">auto socket = use_awaitable.as_default_on(tcp::socket(my_context));
116 // ...
117 co_await socket.async_connect(my_endpoint); // Defaults to use_awaitable.
118 </pre>
119           <br> In this example, the type of the <code class="computeroutput">socket</code> object is transformed
120           from <code class="computeroutput">tcp::socket</code> to have an I/O executor with the default
121           completion token set to <code class="computeroutput">use_awaitable</code>. Alternatively, the
122           socket type may be computed directly:
123 <pre class="programlisting">using tcp_socket = use_awaitable_t&lt;&gt;::as_default_on_t&lt;tcp::socket&gt;;
124 tcp_socket socket(my_context);
125 // ...
126 co_await socket.async_connect(my_endpoint); // Defaults to use_awaitable.
127 </pre>
128           <br>
129         </li>
130 <li class="listitem">
131           Added missing <code class="computeroutput">async_initiate</code> to the Windows-specific I/O objects'
132           asynchronous operations.
133         </li>
134 <li class="listitem">
135           Ensured that the executor type is propagated to newly accepted sockets.
136           When synchronously or asynchronously accepting a new connection, but without
137           specifying an executor or execution context, the accept operation will
138           now correctly propagate the executor type from the acceptor to the socket.
139           For example, if your acceptor type is:
140 <pre class="programlisting">basic_socket_acceptor&lt;ip::tcp, my_executor_type&gt;
141 </pre>
142           <br> then your accepted socket type will be:
143 <pre class="programlisting">basic_stream_socket&lt;ip::tcp, my_executor_type&gt;
144 </pre>
145           <br>
146         </li>
147 <li class="listitem">
148           Changed to require that <code class="computeroutput">Protocol</code> copy and move operations
149           never throw.
150         </li>
151 <li class="listitem">
152           Changed to require that <code class="computeroutput">Endpoint</code> default constructor and move
153           operations never throw.
154         </li>
155 <li class="listitem">
156           Added the <code class="computeroutput">noexcept</code> qualifier to protocol accessors.
157         </li>
158 <li class="listitem">
159           Added the <code class="computeroutput">noexcept</code> qualifier to socket move constructors.
160         </li>
161 <li class="listitem">
162           Fixed issues associated with opening serial ports on Windows:
163           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
164 <li class="listitem">
165                 Use the correct constant to initialise the RTS control flag.
166               </li>
167 <li class="listitem">
168                 Specify a default baud rate (9600).
169               </li>
170 </ul></div>
171         </li>
172 <li class="listitem">
173           Fixed a lost "outstanding work count" that can occur when an
174           asynchronous accept operation is automatically restarted.
175         </li>
176 </ul></div>
177 <h4>
178 <a name="boost_asio.history.h1"></a>
179       <span class="phrase"><a name="boost_asio.history.asio_1_14_1___boost_1_71"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_14_1___boost_1_71">Asio
180       1.14.1 / Boost 1.71</a>
181     </h4>
182 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
183 <li class="listitem">
184           Improved performance slightly by eliminating a redundant move construction
185           when completed handlers are dispatched.
186         </li>
187 <li class="listitem">
188           Eliminated a compiler warning by annotating a <code class="computeroutput">case</code> fall-through
189           in the free function <code class="computeroutput">connect()</code> implementation.
190         </li>
191 <li class="listitem">
192           Fixed the <code class="computeroutput">is_*_buffer_sequence</code> detection traits for user-defined
193           sequence types.
194         </li>
195 <li class="listitem">
196           Fixed some Windows-specific warnings about an incompatible pointer cast
197           when obtaining the <code class="computeroutput">CancelIoEx</code> entry point.
198         </li>
199 <li class="listitem">
200           Changed to automatically set the defaults when opening a serial port on
201           Windows.
202         </li>
203 <li class="listitem">
204           Changed the serial port <code class="computeroutput">get_option()</code> member function to be
205           const.
206         </li>
207 <li class="listitem">
208           Fixed a name hiding issue with the WinRT stream-oriented socket backend's
209           <code class="computeroutput">shutdown</code> function.
210         </li>
211 <li class="listitem">
212           Applied a minor fix to the documentation for <code class="computeroutput">is_dynamic_buffer</code>.
213         </li>
214 <li class="listitem">
215           Added some support for Haiku OS.
216         </li>
217 <li class="listitem">
218           Added wolfSSL compatability.
219         </li>
220 <li class="listitem">
221           Changed to require C++17 or later for coroutines TS support with clang.
222         </li>
223 <li class="listitem">
224           Fixed a doxygen generation problem in the tutorial.
225         </li>
226 <li class="listitem">
227           Ensured example programs are correctly incorporated into the documentation.
228         </li>
229 </ul></div>
230 <h4>
231 <a name="boost_asio.history.h2"></a>
232       <span class="phrase"><a name="boost_asio.history.asio_1_14_0___boost_1_70"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_14_0___boost_1_70">Asio
233       1.14.0 / Boost 1.70</a>
234     </h4>
235 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
236 <li class="listitem">
237           Added custom I/O executor support to I/O objects.
238           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
239 <li class="listitem">
240                 All I/O objects now have an additional <code class="computeroutput">Executor</code> template
241                 parameter. This template parameter defaults to the <code class="computeroutput">asio::executor</code>
242                 type (the polymorphic executor wrapper) but can be used to specify
243                 a user-defined executor type.
244               </li>
245 <li class="listitem">
246                 I/O objects' constructors and functions that previously took an
247                 <code class="computeroutput">asio::io_context&amp;</code> now accept either an <code class="computeroutput">Executor</code>
248                 or a reference to a concrete <code class="computeroutput">ExecutionContext</code> (such
249                 as <code class="computeroutput">asio::io_context</code> or <code class="computeroutput">asio::thread_pool</code>).
250               </li>
251 <li class="listitem">
252                 Note: One potential source of breakage in existing user code is when
253                 reusing an I/O object's <code class="computeroutput">io_context</code> for constructing
254                 another I/O object, as in:
255 <pre class="programlisting">asio::steady_timer my_timer(my_socket.get_executor().context());
256 </pre>
257                 <br> To fix this, either construct the second I/O object using
258                 the first I/O object's executor:<br>
259 <pre class="programlisting">asio::steady_timer my_timer(my_socket.get_executor());
260 </pre>
261                 <br> or otherwise explicitly pass the <code class="computeroutput">io_context</code>:<br>
262 <pre class="programlisting">asio::steady_timer my_timer(my_io_context);
263 </pre>
264                 <br>
265               </li>
266 <li class="listitem">
267                 The previously deprecated <code class="computeroutput">get_io_context</code> and <code class="computeroutput">get_io_service</code>
268                 member functions have now been removed.
269               </li>
270 <li class="listitem">
271                 The previously deprecated service template parameters, and the corresponding
272                 classes, have now been removed.
273               </li>
274 </ul></div>
275         </li>
276 <li class="listitem">
277           Added a new <code class="computeroutput">async_result</code> form with an <code class="computeroutput">initiate</code>
278           static member function.
279           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
280 <li class="listitem">
281                 The <code class="computeroutput">async_result</code> template now supports a new form:
282 <pre class="programlisting">template &lt;typename CompletionToken, typename Signature&gt;
283 struct async_result
284 {
285   typedef /* ... */ return_type;
286
287   template &lt;typename Initiation,
288       typename RawCompletionToken,
289       typename... Args&gt;
290   static return_type initiate(
291       Initiation&amp;&amp; initiation,
292       RawCompletionToken&amp;&amp; token,
293       Args&amp;&amp;... args);
294 };
295 </pre>
296                 <br>
297               </li>
298 <li class="listitem">
299                 The <code class="computeroutput">initiate</code> member function must: (a) transform the
300                 token into a completion handler object <code class="computeroutput">handler</code>; (b)
301                 cause the invocation of the function object <code class="computeroutput">initiation</code>
302                 as if by calling <code class="computeroutput">std::forward&lt;Initiation&gt;(initiation)(std::move(handler),
303                 std::forward&lt;Args&gt;(args)...)</code>. Note that the invocation
304                 of <code class="computeroutput">initiation</code> may be deferred (e.g. lazily evaluated),
305                 in which case <code class="computeroutput">initiation</code> and <code class="computeroutput">args</code> must
306                 be decay-copied and moved as required.
307               </li>
308 <li class="listitem">
309                 A helper function template <code class="computeroutput">async_initiate</code> has also been
310                 added as a wrapper for the invocation of <code class="computeroutput">async_result&lt;&gt;::initiate</code>.
311                 For backward compatibility, this function supports both the old and
312                 new <code class="computeroutput">async_result</code> forms.
313               </li>
314 <li class="listitem">
315                 The composed operations examples have been updated to use <code class="computeroutput">async_initiate</code>.
316               </li>
317 <li class="listitem">
318                 The previously deprecated <code class="computeroutput">handler_type</code> trait and single-argument
319                 form of <code class="computeroutput">async_result</code> have now been removed.
320               </li>
321 </ul></div>
322         </li>
323 <li class="listitem">
324           Updated the Coroutines TS support and promoted it to the <code class="computeroutput">asio</code>
325           namespace.
326           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
327 <li class="listitem">
328                 The <code class="computeroutput">awaitable&lt;&gt;</code>, <code class="computeroutput">co_spawn</code>, <code class="computeroutput">this_coro</code>,
329                 <code class="computeroutput">detached</code>, and <code class="computeroutput">redirect_error</code> facilities
330                 have been moved from the <code class="computeroutput">asio::experimental</code> namespace
331                 to namespace <code class="computeroutput">asio</code>. As part of this change, the <code class="computeroutput">this_coro::token()</code>
332                 awaitable has been superseded by the <code class="computeroutput">asio::use_awaitable</code>
333                 completion token.
334               </li>
335 <li class="listitem">
336                 Please note that the <code class="computeroutput">use_awaitable</code> and <code class="computeroutput">redirect_error</code>
337                 completion tokens work only with asynchronous operations that use
338                 the new form of <code class="computeroutput">async_result</code> with member function <code class="computeroutput">initiate</code>.
339                 Furthermore, when using <code class="computeroutput">use_awaitable</code>, please be aware
340                 that the asynchronous operation is not initiated until <code class="computeroutput">co_await</code>
341                 is applied to the <code class="computeroutput">awaitable&lt;&gt;</code>.
342               </li>
343 </ul></div>
344         </li>
345 <li class="listitem">
346           Added a new <code class="computeroutput">DynamicBuffer_v2</code> concept which is CopyConstructible.
347           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
348 <li class="listitem">
349                 This change adds a new set of type requirements for dynamic buffers,
350                 <code class="computeroutput">DynamicBuffer_v2</code>, which supports copy construction.
351                 These new type requirements enable dynamic buffers to be used as
352                 arguments to user-defined composed operations, where the same dynamic
353                 buffer object is used repeatedly for multiple underlying operations.
354                 For example:<br>
355 <pre class="programlisting">template &lt;typename DynamicBuffer&gt;
356 void echo_line(tcp::socket&amp; sock, DynamicBuffer buf)
357 {
358   n = asio::read_until(sock, buf, '\n');
359   asio::write(sock, buf, asio::transfer_exactly(n));
360 }
361 </pre>
362                 <br>
363               </li>
364 <li class="listitem">
365                 The original <code class="computeroutput">DynamicBuffer</code> type requirements have been
366                 renamed to <code class="computeroutput">DynamicBuffer_v1</code>. These requirements continue
367                 to be compatible with the Networking TS.
368               </li>
369 <li class="listitem">
370                 New type traits <code class="computeroutput">is_dynamic_buffer_v1</code> and <code class="computeroutput">is_dynamic_buffer_v2</code>
371                 have been added to test for conformance to <code class="computeroutput">DynamicBuffer_v1</code>
372                 and <code class="computeroutput">DynamicBuffer_v2</code> respectively. The existing <code class="computeroutput">is_dynamic_buffer</code>
373                 trait has been retained and delegates to <code class="computeroutput">is_dynamic_buffer_v1</code>
374                 (unless <code class="computeroutput">BOOST_ASIO_NO_DYNAMIC_BUFFER_V1</code> is explicitly
375                 defined, in which case it delegates to <code class="computeroutput">is_dynamic_buffer_v2</code>).
376               </li>
377 <li class="listitem">
378                 For convenience, the <code class="computeroutput">dynamic_string_buffer</code> and <code class="computeroutput">dynamic_vector_buffer</code>
379                 classes conform to both <code class="computeroutput">DynamicBuffer_v1</code> and <code class="computeroutput">DynamicBuffer_v2</code>
380                 requirements.
381               </li>
382 <li class="listitem">
383                 When <code class="computeroutput">BOOST_ASIO_NO_DYNAMIC_BUFFER_V1</code> is defined, all
384                 support for <code class="computeroutput">DynamicBuffer_v1</code> types and functions is
385                 #ifdef-ed out. Support for using <code class="computeroutput">basic_streambuf</code> with
386                 the <code class="computeroutput">read</code>, <code class="computeroutput">async_read</code>, <code class="computeroutput">read_until</code>,
387                 <code class="computeroutput">async_read_until</code>, <code class="computeroutput">write</code>, and <code class="computeroutput">async_write</code>
388                 functions is also disabled as a consequence.
389               </li>
390 <li class="listitem">
391                 Note: This change should have no impact on existing source code that
392                 simply uses dynamic buffers in conjunction with Asio's composed operations.
393               </li>
394 </ul></div>
395         </li>
396 <li class="listitem">
397           Added a new <code class="computeroutput">async_compose</code> function that simplifies the implementation
398           of user-defined asynchronous operations.
399         </li>
400 <li class="listitem">
401           Added a <code class="computeroutput">make_strand</code> function, which creates a <code class="computeroutput">strand</code>
402           with a deduced <code class="computeroutput">Executor</code> template argument.
403         </li>
404 <li class="listitem">
405           Relaxed the completion condition type requirements to only require move-constructibility
406           rather than copy-constructibility.
407         </li>
408 <li class="listitem">
409           Added a constructor for <code class="computeroutput">local::basic_endpoint</code> that takes a
410           <code class="computeroutput">string_view</code>.
411         </li>
412 <li class="listitem">
413           Added the noexcept qualifier to various member functions of the <code class="computeroutput">ip::address</code>,
414           <code class="computeroutput">ip::address_v4</code>, <code class="computeroutput">ip::address_v6</code>, <code class="computeroutput">ip::basic_endpoint</code>,
415           and <code class="computeroutput">executor_work_guard</code> classes.
416         </li>
417 <li class="listitem">
418           Added the noexcept qualifier to the <code class="computeroutput">buffer_sequence_begin</code>
419           and <code class="computeroutput">buffer_sequence_end</code> functions.
420         </li>
421 <li class="listitem">
422           Added a new <code class="computeroutput">BOOST_ASIO_DISABLE_VISIBILITY</code> configuration <code class="computeroutput">#define</code>
423           that allows visibility pragmas to be disabled. (Note: If symbols are hidden,
424           extra care must be taken to ensure that Asio types are not passed across
425           shared library API boundaries.)
426         </li>
427 <li class="listitem">
428           Enabled recycling of the memory used to type-erase a function object with
429           the polymorphic executor.
430         </li>
431 <li class="listitem">
432           Changed receive operations to return the correct number of bytes transferred
433           when truncation (<code class="computeroutput">error::message_size</code>) occurs on a datagram-oriented
434           socket.
435         </li>
436 <li class="listitem">
437           Fixed multicast behaviour on QNX by automatically applying <code class="computeroutput">SO_REUSEPORT</code>
438           when the <code class="computeroutput">reuse_address</code> option is set.
439         </li>
440 <li class="listitem">
441           Added inclusion of <code class="computeroutput">unistd.h</code> when targeting Haiku OS, to fix
442           feature detection.
443         </li>
444 <li class="listitem">
445           Added the <code class="computeroutput">network_v[46].hpp</code> headers to the top-level convenience
446           header.
447         </li>
448 <li class="listitem">
449           Fixed calculation of absolute timeout when the backend uses <code class="computeroutput">pthread_cond_timedwait</code>.
450         </li>
451 <li class="listitem">
452           Changed the range-based asynchronous connect operation to deduce the <code class="computeroutput">EndpointSequence</code>
453           iterator type rather than assume the presence of a <code class="computeroutput">const_iterator</code>
454           typedef.
455         </li>
456 <li class="listitem">
457           Fixed <code class="computeroutput">buffer_sequence_begin</code> and <code class="computeroutput">buffer_sequence_end</code>
458           to prevent implicit conversion. This change addresses an issue where a
459           call to <code class="computeroutput">buffer_sequence_begin</code> or <code class="computeroutput">buffer_sequence_end</code>
460           could trigger an implicit conversion to <code class="computeroutput">const_buffer</code> or <code class="computeroutput">mutable_buffer</code>.
461           Whenever this implicit conversion occurred, the return value of <code class="computeroutput">buffer_sequence_begin</code>
462           or <code class="computeroutput">buffer_sequence_end</code> would point to a temporary object.
463         </li>
464 <li class="listitem">
465           Ensured SSL handshake errors are propagated to the peer before the local
466           operation completes.
467         </li>
468 <li class="listitem">
469           Suppressed the <code class="computeroutput">eof</code> error on SSL shutdown as it actually indicates
470           success.
471         </li>
472 <li class="listitem">
473           Added a fallback error code for when we OpenSSL produces an <code class="computeroutput">SSL_ERROR_SYSCALL</code>
474           result without an associated error.
475         </li>
476 <li class="listitem">
477           Changed composed asynchronous read and write operations to move, rather
478           than copy, the buffer sequence objects when the composed operation implementation
479           is moved.
480         </li>
481 <li class="listitem">
482           Changed to use <code class="computeroutput">&lt;atomic&gt;</code> when targeting apple/clang/libc++
483           with recent Xcode versions, even for C++03. This fixes a warning about
484           the deprecation of <code class="computeroutput">OSMemoryBarrier</code>.
485         </li>
486 <li class="listitem">
487           Fixed compile errors that occur when using the composed read and write
488           operations with MSVC 11.0, by disabling <code class="computeroutput">decltype</code> support for
489           that compiler.
490         </li>
491 <li class="listitem">
492           Increased the default value of <code class="computeroutput">_WIN32_WINNT</code> to <code class="computeroutput">0x0601</code>
493           (Windows 7).
494         </li>
495 <li class="listitem">
496           Fixed <code class="computeroutput">dispatch</code> documentation to note that it may call the
497           supplied function object in the current thread.
498         </li>
499 <li class="listitem">
500           Updated <code class="computeroutput">post</code> and <code class="computeroutput">defer</code> documentation to clarify
501           the the distinction between them.
502         </li>
503 <li class="listitem">
504           Fixed compilation errors in the read and write composed operations when
505           used with MSVC 11.0.
506         </li>
507 <li class="listitem">
508           Fixed a Windows-specific issue where the execution context associated with
509           <code class="computeroutput">system_executor</code> was not being correctly cleaned up on exit.
510         </li>
511 </ul></div>
512 <h4>
513 <a name="boost_asio.history.h3"></a>
514       <span class="phrase"><a name="boost_asio.history.asio_1_12_2___boost_1_69"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_12_2___boost_1_69">Asio
515       1.12.2 / Boost 1.69</a>
516     </h4>
517 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
518 <li class="listitem">
519           Fixed a problem with the detection of <code class="computeroutput">std::future</code> availability
520           with libstdc++.
521         </li>
522 <li class="listitem">
523           Fixed compile error in regex overload of <code class="computeroutput">read_until</code>.
524         </li>
525 <li class="listitem">
526           Fixed a timer heap corruption issue that can occur when moving a cancelled
527           timer.
528         </li>
529 <li class="listitem">
530           Fixed detection of <code class="computeroutput">std::experimental::string_view</code> and <code class="computeroutput">std::string_view</code>
531           with newer clang/libc++.
532         </li>
533 <li class="listitem">
534           Fixed MSVC version detection for availability of <code class="computeroutput">std::invoke_result</code>.
535         </li>
536 <li class="listitem">
537           Fixed the buffer sequence traits to test the new requirements, if <code class="computeroutput">decltype</code>
538           is available.
539         </li>
540 <li class="listitem">
541           Fixed an MSVC issue when building with exceptions disabled.
542         </li>
543 <li class="listitem">
544           Added SSL context options for TLS v1.3.
545         </li>
546 <li class="listitem">
547           Added a compile-time test for TLS v1 support.
548         </li>
549 <li class="listitem">
550           Fixed the macro used to test for TLS v1.2 support.
551         </li>
552 <li class="listitem">
553           Prevented global objects from being created once per thread on Windows.
554         </li>
555 <li class="listitem">
556           Fixed a crash when using <code class="computeroutput">size()</code>, <code class="computeroutput">max_size()</code> or
557           <code class="computeroutput">empty()</code> on default-constructed resolver results.
558         </li>
559 <li class="listitem">
560           Changed to move the return value in basic_resolver_results::begin() to
561           avoid copying.
562         </li>
563 <li class="listitem">
564           Enabled move support for the Intel Compiler.
565         </li>
566 <li class="listitem">
567           Fixed <code class="computeroutput">std::string_view</code> detection issue when using clang-cl.
568         </li>
569 <li class="listitem">
570           Fixed the handler tracking operation name for <code class="computeroutput">io_context::executor_type::dispatch</code>.
571         </li>
572 <li class="listitem">
573           Fixed a buffer overflow that could occur when parsing an address string
574           with a 64-bit scope id.
575         </li>
576 <li class="listitem">
577           Added examples showing how to write composed operations.
578         </li>
579 <li class="listitem">
580           Added C++11 versions of the Timeouts, Timers, SOCKS4 and SSL examples.
581         </li>
582 <li class="listitem">
583           Fixed minor issues in documentation and examples.
584         </li>
585 </ul></div>
586 <h4>
587 <a name="boost_asio.history.h4"></a>
588       <span class="phrase"><a name="boost_asio.history.asio_1_12_1___boost_1_67"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_12_1___boost_1_67">Asio
589       1.12.1 / Boost 1.67</a>
590     </h4>
591 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
592 <li class="listitem">
593           Added missing const qualifier to <code class="computeroutput">basic_socket_acceptor::get_option</code>.
594         </li>
595 <li class="listitem">
596           Worked around a parsing error that occurs with some versions of gcc.
597         </li>
598 <li class="listitem">
599           Fixed broken code samples in tutorial.
600         </li>
601 <li class="listitem">
602           Added new experimental features. (Note that "experimental" features
603           may be changed without notice in subsequent releases.)
604           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
605 <li class="listitem">
606                 Added <code class="computeroutput">experimental::detached</code> completion token.
607               </li>
608 <li class="listitem">
609                 Added <code class="computeroutput">experimental::redirect_error</code> completion token.
610               </li>
611 <li class="listitem">
612                 Added <code class="computeroutput">experimental::co_spawn</code> facility for integration
613                 with the coroutines technical specification.
614               </li>
615 </ul></div>
616         </li>
617 <li class="listitem">
618           Updated timeout examples to use latest features.
619           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
620 <li class="listitem">
621                 Used <code class="computeroutput">asio::steady_timer</code> rather than <code class="computeroutput">asio::deadline_timer</code>.
622               </li>
623 <li class="listitem">
624                 Used <code class="computeroutput">asio::dynamic_buffer</code> rather than <code class="computeroutput">asio::streambuf</code>.
625               </li>
626 <li class="listitem">
627                 Used timed <code class="computeroutput">asio::io_context::run_for()</code> function for
628                 blocking clients.
629               </li>
630 <li class="listitem">
631                 Added example showing a custom completion token for blocking with
632                 timeouts.
633               </li>
634 </ul></div>
635         </li>
636 <li class="listitem">
637           Fixed unit tests to compile when <code class="computeroutput">BOOST_ASIO_NO_DEPRECATED</code>
638           is defined.
639         </li>
640 <li class="listitem">
641           Changed socket iostreams to use chrono by default, to fix compatibility
642           with the Networking TS. Define <code class="computeroutput">BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM</code>
643           to enable the old Boost.Date_Time interface in <code class="computeroutput">basic_socket_streambuf</code>
644           and <code class="computeroutput">basic_socket_iostream</code>.
645         </li>
646 <li class="listitem">
647           Updated examples to use chrono rather than Boost.Date_Time.
648         </li>
649 <li class="listitem">
650           Fixed an incorrect member function detector in the <code class="computeroutput">is_dynamic_buffer</code>
651           trait.
652         </li>
653 <li class="listitem">
654           Fixed an <code class="computeroutput">async_result</code> incompatibility with deprecated <code class="computeroutput">handler_type</code>.
655         </li>
656 <li class="listitem">
657           Added a missing move optimisation in the SSL stream implementation.
658         </li>
659 <li class="listitem">
660           Fixed incorrect <code class="computeroutput">basic_resolver_results::value_type</code> typedef.
661         </li>
662 <li class="listitem">
663           Fixed a compile error with some OpenSSL versions when <code class="computeroutput">SSL_OP_NO_COMPRESSION</code>
664           is defined.
665         </li>
666 <li class="listitem">
667           Changed <code class="computeroutput">add_certificate_authority</code> to process multiple certificates
668           in a bundle.
669         </li>
670 <li class="listitem">
671           Eliminated deprecation warning with MSVC by using <code class="computeroutput">std::invoke_result</code>
672           rather than <code class="computeroutput">std::result_of</code>.
673         </li>
674 <li class="listitem">
675           Changed to use <code class="computeroutput">std::string_view</code> for C++17 or later, and <code class="computeroutput">std::experimental::string_view</code>
676           for C++14. Define the preprocessor macro <code class="computeroutput">BOOST_ASIO_DISABLE_STD_STRING_VIEW</code>
677           to force the use of std::experimental::string_view (assuming it is available)
678           when compiling in C++17 mode.
679         </li>
680 <li class="listitem">
681           Ensured <code class="computeroutput">DynamicBuffer</code> template arguments are decayed before
682           using in <code class="computeroutput">enable_if</code> tests.
683         </li>
684 <li class="listitem">
685           Changed documentation to distinguish legacy completion handlers (which
686           are still required to be CopyConstructible) from new MoveConstructible
687           handlers.
688         </li>
689 <li class="listitem">
690           Suppressed a discarded return value warning in the buffer debugging support.
691         </li>
692 <li class="listitem">
693           Fixed <code class="computeroutput">basic_yield_context</code> to work with completion signatures
694           containing reference parameters.
695         </li>
696 <li class="listitem">
697           Ensured that stackful coroutines launched using <code class="computeroutput">spawn()</code> correctly
698           store decayed copies of their function and handler arguments.
699         </li>
700 <li class="listitem">
701           Fixed some compatibility issues with Android.
702         </li>
703 <li class="listitem">
704           Added cross-compilation support to Jamfiles.
705         </li>
706 <li class="listitem">
707           Fixed some minor portability issues in examples.
708         </li>
709 </ul></div>
710 <h4>
711 <a name="boost_asio.history.h5"></a>
712       <span class="phrase"><a name="boost_asio.history.asio_1_12_0___boost_1_66"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_12_0___boost_1_66">Asio
713       1.12.0 / Boost 1.66</a>
714     </h4>
715 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
716 <li class="listitem">
717           Implemented interface changes to reflect the Networking TS (<a href="../www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4656.pdf" target="_top">N4656</a>).
718           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
719 <li class="listitem">
720                 See the <a class="link" href="net_ts.html" title="Networking TS compatibility">list</a> of new interfaces
721                 and, where applicable, the corresponding old interfaces that have
722                 been superseded.
723               </li>
724 <li class="listitem">
725                 The service template parameters, and the corresponding classes, are
726                 disabled by default. For example, instead of <code class="computeroutput">basic_socket&lt;Protocol,
727                 SocketService&gt;</code> we now have simply <code class="computeroutput">basic_socket&lt;Protocol&gt;</code>.
728                 The old interface can be enabled by defining the <code class="computeroutput">BOOST_ASIO_ENABLE_OLD_SERVICES</code>
729                 macro.
730               </li>
731 </ul></div>
732         </li>
733 <li class="listitem">
734           Removed previously deprecated functions.
735         </li>
736 <li class="listitem">
737           Added support for customised handler tracking.
738         </li>
739 <li class="listitem">
740           Added reactor-related (i.e. descriptor readiness) events to handler tracking.
741         </li>
742 <li class="listitem">
743           Added special <a class="link" href="overview/core/concurrency_hint.html" title="Concurrency Hints">concurrency
744           hint</a> values that may be used to disable locking on a per <code class="computeroutput">io_context</code>
745           basis.
746         </li>
747 <li class="listitem">
748           Enabled perfect forwarding for the first <code class="computeroutput">ssl::stream&lt;&gt;</code>
749           constructor argument.
750         </li>
751 <li class="listitem">
752           Added ability to release ownership of the underlying native socket. (Requires
753           Windows 8.1 or later when using the I/O completion port backend.)
754         </li>
755 </ul></div>
756 <h4>
757 <a name="boost_asio.history.h6"></a>
758       <span class="phrase"><a name="boost_asio.history.asio_1_10_10___boost_1_65"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_10___boost_1_65">Asio
759       1.10.10 / Boost 1.65</a>
760     </h4>
761 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
762 <li class="listitem">
763           Changed to require <code class="literal">g++</code> versions &gt;= 4.7 to use standard
764           atomics, to fix a linker error when using <code class="literal">g++</code> 4.6 (<a href="https://svn.boost.org/trac/boost/ticket/13121" target="_top">#13121</a>).
765         </li>
766 <li class="listitem">
767           Enabled use of <code class="computeroutput">constexpr</code> and variadic templates with recent
768           MSVC versions.
769         </li>
770 <li class="listitem">
771           Fixed a race condition in the Linux epoll backend, which may occur when
772           a socket or descriptor is closed while another thread is blocked on epoll.
773         </li>
774 <li class="listitem">
775           Eliminated use of deprecated <code class="computeroutput">auto_ptr</code>.
776         </li>
777 <li class="listitem">
778           Fixed misplaced use of <code class="computeroutput">asio_handler_is_continuation</code> result
779           in reactive <code class="computeroutput">async_accept</code> implementation.
780         </li>
781 <li class="listitem">
782           Changed to use <code class="computeroutput">poll.h</code> rather than <code class="computeroutput">sys/poll.h</code>
783           on some modern POSIX platforms (<a href="https://svn.boost.org/trac/boost/ticket/12419" target="_top">#12419</a>).
784         </li>
785 <li class="listitem">
786           Fixed MSVC intellisense detection.
787         </li>
788 <li class="listitem">
789           Disabled use of the <code class="computeroutput">__thread</code> keyword extension for android/clang/x86
790           targets.
791         </li>
792 </ul></div>
793 <h4>
794 <a name="boost_asio.history.h7"></a>
795       <span class="phrase"><a name="boost_asio.history.asio_1_10_9___boost_1_64"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_9___boost_1_64">Asio
796       1.10.9 / Boost 1.64</a>
797     </h4>
798 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
799 <li class="listitem">
800           Added limited support for using regular file descriptors (where I/O operations
801           should never fail with <code class="computeroutput">EAGAIN</code> or <code class="computeroutput">EWOULDBLOCK</code>)
802           with <code class="computeroutput">posix::stream_descriptor</code>, when using the Linux epoll
803           backend.
804         </li>
805 <li class="listitem">
806           Changed to use <code class="computeroutput">allocator_traits</code> to rebind allocators in C++11
807           or later.
808         </li>
809 <li class="listitem">
810           Eliminated a double "construction" issue in the converting move
811           constructors.
812         </li>
813 <li class="listitem">
814           Added new <code class="computeroutput">ssl::context_base</code> enumerations to enable support
815           for any TLS version, and improved consistency of SSL/TLS version handling
816           across OpenSSL releases.
817         </li>
818 <li class="listitem">
819           Applied more changes to address OpenSSL 1.1 compatibility.
820         </li>
821 <li class="listitem">
822           Fixed a compile error when OpenSSL compression is disabled at compile time.
823         </li>
824 <li class="listitem">
825           Suppressed some spurious unused variable warnings issued by <code class="literal">gcc</code>
826           (<a href="https://svn.boost.org/trac/boost/ticket/12302" target="_top">#12302</a>).
827         </li>
828 <li class="listitem">
829           Worked around a new clang warning issued for usage of the comma operator.
830         </li>
831 <li class="listitem">
832           Fixed various header ordering problems.
833         </li>
834 <li class="listitem">
835           Changed to refer <code class="computeroutput">std::atomic_thread_fence</code>, when available,
836           to eliminate a deprecated function warning on newest macOS SDK (<a href="https://svn.boost.org/trac/boost/ticket/12482" target="_top">#12482</a>).
837         </li>
838 <li class="listitem">
839           Added a workaround for broken <code class="computeroutput">getaddrinfo</code> in Apple's NAT64
840           environment.
841         </li>
842 <li class="listitem">
843           Fixed an exception safety issue in the internal hash map implementation.
844         </li>
845 </ul></div>
846 <h4>
847 <a name="boost_asio.history.h8"></a>
848       <span class="phrase"><a name="boost_asio.history.asio_1_10_8___boost_1_62"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_8___boost_1_62">Asio
849       1.10.8 / Boost 1.62</a>
850     </h4>
851 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
852 <li class="listitem">
853           Added compatibility with OpenSSL 1.1.0 (<a href="https://svn.boost.org/trac/boost/ticket/12238" target="_top">#12238</a>).
854         </li>
855 <li class="listitem">
856           Fixed out-of-bounds iterator use in <code class="computeroutput">asio::connect()</code> when the
857           <code class="computeroutput">connect_condition</code> returns an end iterator (<a href="https://svn.boost.org/trac/boost/ticket/12354" target="_top">#12354</a>).
858         </li>
859 <li class="listitem">
860           Added a workaround for a move detection problem on MSVC 2015 Update 2 (<a href="https://svn.boost.org/trac/boost/ticket/12115" target="_top">#12115</a>).
861         </li>
862 <li class="listitem">
863           Changed a workaround that was previously added for broken Windows firewalls
864           to only bind to 127.0.0.1 if <code class="computeroutput">getsockname</code> reports 0.0.0.0 (<a href="https://svn.boost.org/trac/boost/ticket/12406" target="_top">#12406</a>).
865         </li>
866 <li class="listitem">
867           Added call to <code class="computeroutput">SSL_COMP_free_compression_methods</code> to fix two
868           memory leaks reported at shutdown, for OpenSSL versions &gt;= 1.0.2 and
869           &lt; 1.1.0 (<a href="https://svn.boost.org/trac/boost/ticket/10795" target="_top">#10795</a>).
870         </li>
871 <li class="listitem">
872           Fixed <code class="computeroutput">use_future</code> compile error encountered on some standard
873           library implementations, by changing <code class="computeroutput">std::allocator&lt;void&gt;</code>
874           use to a non-void template parameter.
875         </li>
876 <li class="listitem">
877           Enabled use of native <code class="computeroutput">getaddrinfo</code> by default on Apple OSes,
878           rather than emulation in terms of <code class="computeroutput">getipnodebyname</code>.
879         </li>
880 </ul></div>
881 <h4>
882 <a name="boost_asio.history.h9"></a>
883       <span class="phrase"><a name="boost_asio.history.asio_1_10_7___boost_1_60"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_7___boost_1_60">Asio
884       1.10.7 / Boost 1.60</a>
885     </h4>
886 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
887 <li class="listitem">
888           Added support for Windows 8.1 Store apps.
889         </li>
890 <li class="listitem">
891           Fixed macro multiple definition error on Microsoft Visual Studio 2015 (<a href="https://svn.boost.org/trac/boost/ticket/11539" target="_top">#11539</a>).
892         </li>
893 <li class="listitem">
894           Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput">OPENSSL_NO_SSL3</code>
895           feature test <code class="computeroutput">#define</code> (<a href="https://svn.boost.org/trac/boost/ticket/11754" target="_top">#11754</a>).
896         </li>
897 <li class="listitem">
898           Changed Asio's SSL wrapper to use OpenSSL's new <code class="computeroutput">SSL_CTX_clear_chain_certs</code>
899           function, if available.
900         </li>
901 <li class="listitem">
902           Suppressed a clang 3.6+ warning about unused typedefs (<a href="https://svn.boost.org/trac/boost/ticket/11767" target="_top">#11767</a>).
903         </li>
904 <li class="listitem">
905           Regenerated certificates used by SSL examples.
906         </li>
907 <li class="listitem">
908           Fixed buffer sizes passed to <code class="computeroutput">strncat</code> in the <code class="computeroutput">getaddrinfo</code>
909           emulation and in the SSL wrapper's password handling.
910         </li>
911 <li class="listitem">
912           Changed Windows backend to use non-macro <code class="computeroutput">CreateEventW</code> rather
913           than <code class="computeroutput">CreateEvent</code> (<a href="https://svn.boost.org/trac/boost/ticket/11732" target="_top">#11732</a>).
914         </li>
915 </ul></div>
916 <h4>
917 <a name="boost_asio.history.h10"></a>
918       <span class="phrase"><a name="boost_asio.history.asio_1_10_6___boost_1_58"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_6___boost_1_58">Asio
919       1.10.6 / Boost 1.58</a>
920     </h4>
921 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
922 <li class="listitem">
923           Ensured errors generated by Windows' <code class="computeroutput">ConnectEx</code> function are
924           mapped to their portable equivalents (<a href="https://svn.boost.org/trac/boost/ticket/10744" target="_top">#10744</a>).
925         </li>
926 <li class="listitem">
927           Added new macro <code class="computeroutput">BOOST_ASIO_DISABLE_CONNECTEX</code> to allow use
928           of <code class="computeroutput">ConnectEx</code> to be explicitly disabled.
929         </li>
930 <li class="listitem">
931           Fixed a race condition in <code class="computeroutput">windows::object_handle</code> when there
932           are pending wait operations on destruction (<a href="https://svn.boost.org/trac/boost/ticket/10624" target="_top">#10624</a>).
933         </li>
934 <li class="listitem">
935           Fixed IPv6 address parsing on FreeBSD, where a trailing scope ID would
936           cause conversion to fail with <code class="computeroutput">EINVAL</code>.
937         </li>
938 <li class="listitem">
939           Worked around shared library visibility issues by ensuring Asio types use
940           default visibility (<a href="https://svn.boost.org/trac/boost/ticket/9465" target="_top">#9465</a>, <a href="https://svn.boost.org/trac/boost/ticket/11070" target="_top">#11070</a>).
941         </li>
942 <li class="listitem">
943           Changed the SSL wrapper to call the password callback when loading an in-memory
944           key (<a href="https://svn.boost.org/trac/boost/ticket/10828" target="_top">#10828</a>).
945         </li>
946 <li class="listitem">
947           Fixed false SSL error reports by ensuring that the SSL error queue is cleared
948           prior to each operation.
949         </li>
950 <li class="listitem">
951           Fixed an <code class="computeroutput">ssl::stream&lt;&gt;</code> bug that may result in spurious
952           'short read' errors.
953         </li>
954 <li class="listitem">
955           Removed a redundant null pointer check in the SSL engine (<a href="https://svn.boost.org/trac/boost/ticket/10088" target="_top">#10088</a>).
956         </li>
957 <li class="listitem">
958           Added options for disabling TLS v1.1 and v1.2 (<a href="https://svn.boost.org/trac/boost/ticket/10690" target="_top">#10690</a>).
959         </li>
960 <li class="listitem">
961           Removed use of deprecated OpenSSL function <code class="computeroutput">ERR_remove_state</code>.
962         </li>
963 <li class="listitem">
964           Fixed detection of various C++11 features with Clang (<a href="https://svn.boost.org/trac/boost/ticket/8835" target="_top">#8835</a>, <a href="https://svn.boost.org/trac/boost/ticket/10884" target="_top">#10884</a>).
965         </li>
966 <li class="listitem">
967           Fixed detection of C++11 <code class="computeroutput">std::addressof</code> with <code class="literal">g++</code>
968           (<a href="https://svn.boost.org/trac/boost/ticket/10982" target="_top">#10982</a>).
969         </li>
970 <li class="listitem">
971           Changed multicast test to treat certain <code class="computeroutput">join_group</code> failures
972           as non-fatal.
973         </li>
974 <li class="listitem">
975           Decoupled Asio unit tests from Boost.Test (<a href="https://svn.boost.org/trac/boost/ticket/11116" target="_top">#11116</a>).
976         </li>
977 <li class="listitem">
978           Changed the tutorial to use <code class="computeroutput">std::endl</code> to ensure output is
979           flushed.
980         </li>
981 <li class="listitem">
982           Fixed an unsigned integer overflow reported by Clang's integer sanitizer.
983         </li>
984 <li class="listitem">
985           Added support for move-only return types when using a <code class="computeroutput">yield_context</code>
986           object with asynchronous operations.
987         </li>
988 <li class="listitem">
989           Changed <code class="computeroutput">yield_context</code> to allow reentrant calls to the completion
990           handler from an initiating function.
991         </li>
992 <li class="listitem">
993           Updated detection of Windows Runtime to work with latest Windows SDK.
994         </li>
995 </ul></div>
996 <h4>
997 <a name="boost_asio.history.h11"></a>
998       <span class="phrase"><a name="boost_asio.history.asio_1_10_5___boost_1_57"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_5___boost_1_57">Asio
999       1.10.5 / Boost 1.57</a>
1000     </h4>
1001 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1002 <li class="listitem">
1003           Fixed the <code class="literal">kqueue</code> reactor so that it works on FreeBSD
1004           (<a href="https://svn.boost.org/trac/boost/ticket/10606" target="_top">#10606</a>).
1005         </li>
1006 <li class="listitem">
1007           Fixed an issue in the <code class="literal">kqueue</code> reactor which resulted
1008           in spinning when using serial ports on Mac OS (<a href="https://svn.boost.org/trac/boost/ticket/10496" target="_top">#10496</a>).
1009         </li>
1010 <li class="listitem">
1011           Fixed <code class="literal">kqueue</code> reactor support for read-only file descriptors
1012           (<a href="https://svn.boost.org/trac/boost/ticket/10367" target="_top">#10367</a>).
1013         </li>
1014 <li class="listitem">
1015           Fixed a compile error when using the <code class="literal">/dev/poll</code> reactor
1016           (<a href="https://svn.boost.org/trac/boost/ticket/10350" target="_top">#10350</a>, <a href="https://svn.boost.org/trac/boost/ticket/10572" target="_top">#10572</a>).
1017         </li>
1018 <li class="listitem">
1019           Changed the Windows backend to use <code class="computeroutput">WSASocketW</code>, as <code class="computeroutput">WSASocketA</code>
1020           has been deprecated (<a href="https://svn.boost.org/trac/boost/ticket/10534" target="_top">#10534</a>).
1021         </li>
1022 <li class="listitem">
1023           Fixed some warnings reported by Visual C++ 2013 (<a href="https://svn.boost.org/trac/boost/ticket/10376" target="_top">#10376</a>).
1024         </li>
1025 <li class="listitem">
1026           Fixed integer type used in the WinRT version of the byte-order conversion
1027           functions (<a href="https://svn.boost.org/trac/boost/ticket/10539" target="_top">#10539</a>).
1028         </li>
1029 <li class="listitem">
1030           Changed documentation to indicate that <code class="computeroutput">use_future</code> and <code class="computeroutput">spawn()</code>
1031           are not made available when including the <code class="computeroutput">asio.hpp</code> convenience
1032           header (<a href="https://svn.boost.org/trac/boost/ticket/10567" target="_top">#10567</a>).
1033         </li>
1034 <li class="listitem">
1035           Explicitly marked <code class="computeroutput">asio::strand</code> as deprecated. Use <code class="computeroutput">asio::io_service::strand</code>
1036           instead.
1037         </li>
1038 </ul></div>
1039 <h4>
1040 <a name="boost_asio.history.h12"></a>
1041       <span class="phrase"><a name="boost_asio.history.asio_1_10_4___boost_1_56"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_4___boost_1_56">Asio
1042       1.10.4 / Boost 1.56</a>
1043     </h4>
1044 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1045 <li class="listitem">
1046           Stopped using certain Winsock functions that are marked as deprecated in
1047           the latest Visual C++ and Windows SDK.
1048         </li>
1049 <li class="listitem">
1050           Fixed a shadow variable warning on Windows.
1051         </li>
1052 <li class="listitem">
1053           Fixed a regression in the <code class="literal">kqueue</code> backend that was introduced
1054           in Asio 1.10.2.
1055         </li>
1056 <li class="listitem">
1057           Added a workaround for building the unit tests with <code class="literal">gcc</code>
1058           on AIX.
1059         </li>
1060 </ul></div>
1061 <h4>
1062 <a name="boost_asio.history.h13"></a>
1063       <span class="phrase"><a name="boost_asio.history.asio_1_10_3"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_3">Asio
1064       1.10.3</a>
1065     </h4>
1066 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1067 <li class="listitem">
1068           Worked around a <code class="literal">gcc</code> problem to do with anonymous enums
1069           (<a href="https://svn.boost.org/trac/boost/ticket/10042" target="_top">#10042</a>).
1070         </li>
1071 <li class="listitem">
1072           Reverted the Windows <code class="computeroutput">HANDLE</code> backend change to ignore <code class="computeroutput">ERROR_MORE_DATA</code>.
1073           Instead, the error will be propagated as with any other (i.e. in an <code class="computeroutput">error_code</code>
1074           or thrown as a <code class="computeroutput">system_error</code>), and the number of bytes transferred
1075           will be returned. For code that needs to handle partial messages, the
1076           <code class="computeroutput">error_code</code> overload should be used (<a href="https://svn.boost.org/trac/boost/ticket/10034" target="_top">#10034</a>).
1077         </li>
1078 <li class="listitem">
1079           Fixed an off-by-one error in the <code class="computeroutput">signal_set</code> implementation's
1080           signal number check (<a href="https://svn.boost.org/trac/boost/ticket/9324" target="_top">#9324</a>).
1081         </li>
1082 <li class="listitem">
1083           Changed the Windows IOCP backend to not assume that <code class="computeroutput">SO_UPDATE_CONNECT_CONTEXT</code>
1084           is defined (<a href="https://svn.boost.org/trac/boost/ticket/10016" target="_top">#10016</a>).
1085         </li>
1086 <li class="listitem">
1087           Fixed a Windows-specific issue, introduced in Asio 1.10.2, by using <code class="computeroutput">VerifyVersionInfo</code>
1088           rather than <code class="computeroutput">GetVersionEx</code>, as <code class="computeroutput">GetVersionEx</code> has
1089           been deprecated.
1090         </li>
1091 <li class="listitem">
1092           Changed to use SSE2 intrinsics rather than inline assembly, to allow the
1093           Cray compiler to work.
1094         </li>
1095 </ul></div>
1096 <h4>
1097 <a name="boost_asio.history.h14"></a>
1098       <span class="phrase"><a name="boost_asio.history.asio_1_10_2"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_2">Asio
1099       1.10.2</a>
1100     </h4>
1101 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1102 <li class="listitem">
1103           Fixed <code class="computeroutput">asio::spawn()</code> to work correctly with new Boost.Coroutine
1104           interface (<a href="https://svn.boost.org/trac/boost/ticket/9442" target="_top">#9442</a>, <a href="https://svn.boost.org/trac/boost/ticket/9928" target="_top">#9928</a>).
1105         </li>
1106 <li class="listitem">
1107           Ensured that incomplete <code class="computeroutput">asio::spawn()</code> coroutines are correctly
1108           unwound when cleaned up by the <code class="computeroutput">io_service</code> destructor (<a href="https://svn.boost.org/trac/boost/ticket/9731" target="_top">#9731</a>).
1109         </li>
1110 <li class="listitem">
1111           Fixed delegation of continuation hook for handlers produced by <code class="computeroutput">io_service::wrap()</code>
1112           and <code class="computeroutput">strand::wrap()</code> (<a href="https://svn.boost.org/trac/boost/ticket/9741" target="_top">#9741</a>).
1113         </li>
1114 <li class="listitem">
1115           Changed the Windows I/O completion port backend to use <code class="computeroutput">ConnectEx</code>,
1116           if available, for connection-oriented IP sockets.
1117         </li>
1118 <li class="listitem">
1119           Changed the <code class="computeroutput">io_service</code> backend for non-Windows (and non-IOCP
1120           Windows) platforms to use a single condition variable per <code class="computeroutput">io_service</code>
1121           instance. This addresses a potential race condition when <code class="computeroutput">run_one()</code>
1122           is used from multiple threads.
1123         </li>
1124 <li class="listitem">
1125           Prevented integer overflow when computing timeouts based on some <code class="computeroutput">boost::chrono</code>
1126           and <code class="computeroutput">std::chrono</code> clocks (<a href="https://svn.boost.org/trac/boost/ticket/9662" target="_top">#9662</a>, <a href="https://svn.boost.org/trac/boost/ticket/9778" target="_top">#9778</a>).
1127         </li>
1128 <li class="listitem">
1129           Made further changes to <code class="computeroutput">EV_CLEAR</code> handling in the kqueue backend,
1130           to address other cases where the <code class="computeroutput">close()</code> system call may hang
1131           on Mac OS X.
1132         </li>
1133 <li class="listitem">
1134           Fixed infinite recursion in implementation of <code class="computeroutput">resolver_query_base::flags::operator~</code>
1135           (<a href="https://svn.boost.org/trac/boost/ticket/9548" target="_top">#9548</a>).
1136         </li>
1137 <li class="listitem">
1138           Made the <code class="computeroutput">select</code> reactor more efficient on Windows for large
1139           numbers of sockets (<a href="https://svn.boost.org/trac/boost/ticket/9528" target="_top">#9528</a>).
1140         </li>
1141 <li class="listitem">
1142           Fixed a Windows-specific type-aliasing issue reported by <code class="literal">gcc</code>
1143           (<a href="https://svn.boost.org/trac/boost/ticket/9550" target="_top">#9550</a>).
1144         </li>
1145 <li class="listitem">
1146           Prevented execution of compile-time-only buffer test to avoid triggering
1147           an address sanitiser warning (<a href="https://svn.boost.org/trac/boost/ticket/8295" target="_top">#8295</a>).
1148         </li>
1149 <li class="listitem">
1150           Disabled the <code class="computeroutput">GetQueuedCompletionStatus</code> timeout workaround
1151           on recent versions of Windows.
1152         </li>
1153 <li class="listitem">
1154           Added support for string-based scope IDs when using link-local multicast
1155           addresses.
1156         </li>
1157 <li class="listitem">
1158           Changed IPv6 multicast group join to use the address's scope ID as the
1159           interface, if an interface is not explicitly specified.
1160         </li>
1161 <li class="listitem">
1162           Fixed multicast test failure on Mac OS X and the BSDs by using a link-local
1163           multicast address.
1164         </li>
1165 <li class="listitem">
1166           Various minor documentation improvements (<a href="https://svn.boost.org/trac/boost/ticket/8295" target="_top">#8295</a>, <a href="https://svn.boost.org/trac/boost/ticket/9605" target="_top">#9605</a>, <a href="https://svn.boost.org/trac/boost/ticket/9771" target="_top">#9771</a>).
1167         </li>
1168 </ul></div>
1169 <h4>
1170 <a name="boost_asio.history.h15"></a>
1171       <span class="phrase"><a name="boost_asio.history.asio_1_10_1___boost_1_55"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_1___boost_1_55">Asio
1172       1.10.1 / Boost 1.55</a>
1173     </h4>
1174 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1175 <li class="listitem">
1176           Implemented a limited port to Windows Runtime. This support requires that
1177           the language extensions be enabled. Due to the restricted facilities exposed
1178           by the Windows Runtime API, the port also comes with the following caveats:
1179           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1180 <li class="listitem">
1181                 The core facilities such as the <code class="computeroutput">io_service</code>, <code class="computeroutput">strand</code>,
1182                 buffers, composed operations, timers, etc., should all work as normal.
1183               </li>
1184 <li class="listitem">
1185                 For sockets, only client-side TCP is supported.
1186               </li>
1187 <li class="listitem">
1188                 Explicit binding of a client-side TCP socket is not supported.
1189               </li>
1190 <li class="listitem">
1191                 The <code class="computeroutput">cancel()</code> function is not supported for sockets.
1192                 Asynchronous operations may only be cancelled by closing the socket.
1193               </li>
1194 <li class="listitem">
1195                 Operations that use <code class="computeroutput">null_buffers</code> are not supported.
1196               </li>
1197 <li class="listitem">
1198                 Only <code class="computeroutput">tcp::no_delay</code> and <code class="computeroutput">socket_base::keep_alive</code>
1199                 options are supported.
1200               </li>
1201 <li class="listitem">
1202                 Resolvers do not support service names, only numbers. I.e. you must
1203                 use "80" rather than "http".
1204               </li>
1205 <li class="listitem">
1206                 Most resolver query flags have no effect.
1207               </li>
1208 </ul></div>
1209         </li>
1210 <li class="listitem">
1211           Fixed a regression (introduced in Boost 1.54) where, on some platforms,
1212           errors from <code class="computeroutput">async_connect</code> were not correctly propagated through
1213           to the completion handler (<a href="https://svn.boost.org/trac/boost/ticket/8795" target="_top">#8795</a>).
1214         </li>
1215 <li class="listitem">
1216           Fixed a Windows-specific regression (introduced in Boost 1.54) that occurs
1217           when multiple threads are running an <code class="computeroutput">io_service</code>. When the
1218           bug occurs, the result of an asynchronous operation (error and bytes tranferred)
1219           is incorrectly discarded and zero values used instead. For TCP sockets
1220           this results in spurious end-of-file notifications (<a href="https://svn.boost.org/trac/boost/ticket/8933" target="_top">#8933</a>).
1221         </li>
1222 <li class="listitem">
1223           Fixed a bug in handler tracking, where it was not correctly printing out
1224           some handler IDs (<a href="https://svn.boost.org/trac/boost/ticket/8808" target="_top">#8808</a>).
1225         </li>
1226 <li class="listitem">
1227           Fixed the comparison used to test for successful synchronous accept operations
1228           so that it works correctly with unsigned socket descriptors (<a href="https://svn.boost.org/trac/boost/ticket/8752" target="_top">#8752</a>).
1229         </li>
1230 <li class="listitem">
1231           Ensured the signal number is correctly passed to the completion handler
1232           when starting an <code class="computeroutput">async_wait</code> on a signal that is already raised
1233           (<a href="https://svn.boost.org/trac/boost/ticket/8738" target="_top">#8738</a>).
1234         </li>
1235 <li class="listitem">
1236           Suppressed a g++ 4.8+ warning about unused typedefs (<a href="https://svn.boost.org/trac/boost/ticket/8980" target="_top">#8980</a>).
1237         </li>
1238 <li class="listitem">
1239           Enabled the move optimisation for handlers that use the default invocation
1240           hook (<a href="https://svn.boost.org/trac/boost/ticket/8624" target="_top">#8624</a>).
1241         </li>
1242 <li class="listitem">
1243           Clarified that programs must not issue overlapping <code class="computeroutput">async_write_at</code>
1244           operations (<a href="https://svn.boost.org/trac/boost/ticket/8669" target="_top">#8669</a>).
1245         </li>
1246 <li class="listitem">
1247           Changed the Windows <code class="computeroutput">HANDLE</code> backend to treat <code class="computeroutput">ERROR_MORE_DATA</code>
1248           as a non-fatal error when returned by <code class="computeroutput">GetOverlappedResult</code>
1249           for a synchronous read (<a href="https://svn.boost.org/trac/boost/ticket/8722" target="_top">#8722</a>).
1250         </li>
1251 <li class="listitem">
1252           Visual C++ language extensions use <code class="computeroutput">generic</code> as a keyword. Added
1253           a workaround that renames the namespace to <code class="computeroutput">cpp_generic</code> when
1254           those language extensions are in effect.
1255         </li>
1256 <li class="listitem">
1257           Fixed some asynchronous operations that missed out on getting <code class="computeroutput">async_result</code>
1258           support in Boost 1.54. In particular, the buffered stream templates have
1259           been updated so that they adhere to current handler patterns (<a href="https://svn.boost.org/trac/boost/ticket/9000" target="_top">#9000</a>,
1260           <a href="https://svn.boost.org/trac/boost/ticket/9001" target="_top">#9001</a>).
1261         </li>
1262 <li class="listitem">
1263           Enabled move support for Microsoft Visual Studio 2012 (<a href="https://svn.boost.org/trac/boost/ticket/8959" target="_top">#8959</a>).
1264         </li>
1265 <li class="listitem">
1266           Added <code class="computeroutput">use_future</code> support for Microsoft Visual Studio 2012.
1267         </li>
1268 <li class="listitem">
1269           Removed a use of <code class="computeroutput">std::min</code> in the Windows IOCP backend to avoid
1270           a dependency on the <code class="computeroutput">&lt;algorithm&gt;</code> header (<a href="https://svn.boost.org/trac/boost/ticket/8758" target="_top">#8758</a>).
1271         </li>
1272 <li class="listitem">
1273           Eliminated some unnecessary handler copies.
1274         </li>
1275 <li class="listitem">
1276           Fixed support for older versions of OpenSSL that do not provide the <code class="computeroutput">SSL_CTX_clear_options</code>
1277           function (<a href="https://svn.boost.org/trac/boost/ticket/9273" target="_top">#9273</a>).
1278         </li>
1279 <li class="listitem">
1280           Fixed various minor and cosmetic issues in code and documentation (including
1281           <a href="https://svn.boost.org/trac/boost/ticket/8347" target="_top">#8347</a>, <a href="https://svn.boost.org/trac/boost/ticket/8950" target="_top">#8950</a>, <a href="https://svn.boost.org/trac/boost/ticket/8953" target="_top">#8953</a>, <a href="https://svn.boost.org/trac/boost/ticket/8965" target="_top">#8965</a>, <a href="https://svn.boost.org/trac/boost/ticket/8997" target="_top">#8997</a>, <a href="https://svn.boost.org/trac/boost/ticket/9230" target="_top">#9230</a>).
1282         </li>
1283 </ul></div>
1284 <h4>
1285 <a name="boost_asio.history.h16"></a>
1286       <span class="phrase"><a name="boost_asio.history.asio_1_10_0___boost_1_54"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_10_0___boost_1_54">Asio
1287       1.10.0 / Boost 1.54</a>
1288     </h4>
1289 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1290 <li class="listitem">
1291           Added new traits classes, <code class="computeroutput">handler_type</code> and <code class="computeroutput">async_result</code>,
1292           that allow the customisation of the return type of an initiating function.
1293         </li>
1294 <li class="listitem">
1295           Added the <code class="computeroutput">asio::spawn()</code> function, a high-level wrapper for
1296           running stackful coroutines, based on the Boost.Coroutine library. The
1297           <code class="computeroutput">spawn()</code> function enables programs to implement asynchronous
1298           logic in a synchronous manner. For example: <code class="computeroutput">size_t n = my_socket.async_read_some(my_buffer,
1299           yield);</code>. For further information, see <a class="link" href="overview/core/spawn.html" title="Stackful Coroutines">Stackful
1300           Coroutines</a>.
1301         </li>
1302 <li class="listitem">
1303           Added the <code class="computeroutput">asio::use_future</code> special value, which provides first-class
1304           support for returning a C++11 <code class="computeroutput">std::future</code> from an asynchronous
1305           operation's initiating function. For example: <code class="computeroutput">future&lt;size_t&gt;
1306           = my_socket.async_read_some(my_buffer, asio::use_future);</code>. For further
1307           information, see <a class="link" href="overview/cpp2011/futures.html" title="Futures">C++
1308           2011 Support - Futures</a>.
1309         </li>
1310 <li class="listitem">
1311           Promoted the stackless coroutine class and macros to be part of Asio's
1312           documented interface, rather than part of the HTTP server 4 example. For
1313           further information, see <a class="link" href="overview/core/coroutine.html" title="Stackless Coroutines">Stackless
1314           Coroutines</a>.
1315         </li>
1316 <li class="listitem">
1317           Added a new handler hook called <code class="computeroutput">asio_handler_is_continuation</code>.
1318           Asynchronous operations may represent a continuation of the asynchronous
1319           control flow associated with the current executing handler. The <code class="computeroutput">asio_handler_is_continuation</code>
1320           hook can be customised to return <code class="computeroutput">true</code> if this is the case,
1321           and Asio's implementation can use this knowledge to optimise scheduling
1322           of the new handler. To cover common cases, Asio customises the hook for
1323           strands, <code class="computeroutput">spawn()</code> and composed asynchronous operations.
1324         </li>
1325 <li class="listitem">
1326           Added four new generic protocol classes, <code class="computeroutput">generic::datagram_protocol</code>,
1327           <code class="computeroutput">generic::raw_protocol</code>, <code class="computeroutput">generic::seq_packet_protocol</code>
1328           and <code class="computeroutput">generic::stream_protocol</code>, which implement the <code class="computeroutput">Protocol</code>
1329           type requirements, but allow the user to specify the address family (e.g.
1330           <code class="computeroutput">AF_INET</code>) and protocol type (e.g. <code class="computeroutput">IPPROTO_TCP</code>)
1331           at runtime. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
1332           for Other Protocols</a>.
1333         </li>
1334 <li class="listitem">
1335           Added C++11 move constructors that allow the conversion of a socket (or
1336           acceptor) into a more generic type. For example, an <code class="computeroutput">ip::tcp::socket</code>
1337           can be converted into a <code class="computeroutput">generic::stream_protocol::socket</code> via
1338           move construction. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
1339           for Other Protocols</a>.
1340         </li>
1341 <li class="listitem">
1342           Extended the <code class="computeroutput">basic_socket_acceptor&lt;&gt;</code>'s <code class="computeroutput">accept()</code>
1343           and <code class="computeroutput">async_accept()</code> functions to allow a new connection to
1344           be accepted directly into a socket of a more generic type. For example,
1345           an <code class="computeroutput">ip::tcp::acceptor</code> can be used to accept into a <code class="computeroutput">generic::stream_protocol::socket</code>
1346           object. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
1347           for Other Protocols</a>.
1348         </li>
1349 <li class="listitem">
1350           Moved existing examples into a C++03-specific directory, and added a new
1351           directory for C++11-specific examples. A limited subset of the C++03 examples
1352           have been converted to their C++11 equivalents.
1353         </li>
1354 <li class="listitem">
1355           Various SSL enhancements. Thanks go to Nick Jones, on whose work these
1356           changes are based.
1357           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1358 <li class="listitem">
1359                 Added support for SSL handshakes with re-use of data already read
1360                 from the wire. New overloads of the <code class="computeroutput">ssl::stream&lt;&gt;</code>
1361                 class's <code class="computeroutput">handshake()</code> and <code class="computeroutput">async_handshake()</code>
1362                 functions have been added. These accept a <code class="computeroutput">ConstBufferSequence</code>
1363                 to be used as initial input to the ssl engine for the handshake procedure.
1364               </li>
1365 <li class="listitem">
1366                 Added support for creation of TLSv1.1 and TLSv1.2 <code class="computeroutput">ssl::context</code>
1367                 objects.
1368               </li>
1369 <li class="listitem">
1370                 Added a <code class="computeroutput">set_verify_depth()</code> function to the <code class="computeroutput">ssl::context</code>
1371                 and <code class="computeroutput">ssl::stream&lt;&gt;</code> classes.
1372               </li>
1373 <li class="listitem">
1374                 Added the ability to load SSL certificate and key data from memory
1375                 buffers. New functions, <code class="computeroutput">add_certificate_authority()</code>,
1376                 <code class="computeroutput">use_certificate()</code>, <code class="computeroutput">use_certificate_chain()</code>,
1377                 <code class="computeroutput">use_private_key()</code>, <code class="computeroutput">use_rsa_private_key()</code>
1378                 and <code class="computeroutput">use_tmp_dh()</code>, have been added to the <code class="computeroutput">ssl::context</code>
1379                 class.
1380               </li>
1381 <li class="listitem">
1382                 Changed <code class="computeroutput">ssl::context</code> to automatically disable SSL compression
1383                 by default. To enable, use the new <code class="computeroutput">ssl::context::clear_options()</code>
1384                 function, as in <code class="computeroutput">my_context.clear_options(ssl::context::no_compression)</code>.
1385               </li>
1386 </ul></div>
1387         </li>
1388 <li class="listitem">
1389           Fixed a potential deadlock in <code class="computeroutput">signal_set</code> implementation.
1390         </li>
1391 <li class="listitem">
1392           Fixed an error in acceptor example in documentation <a href="https://svn.boost.org/trac/boost/ticket/8421" target="_top">#8421</a>.
1393         </li>
1394 <li class="listitem">
1395           Fixed copy-paste errors in waitable timer documentation <a href="https://svn.boost.org/trac/boost/ticket/8602" target="_top">#8602</a>.
1396         </li>
1397 <li class="listitem">
1398           Added assertions to satisfy some code analysis tools <a href="https://svn.boost.org/trac/boost/ticket/7739" target="_top">#7739</a>.
1399         </li>
1400 <li class="listitem">
1401           Fixed a malformed <code class="computeroutput">#warning</code> directive <a href="https://svn.boost.org/trac/boost/ticket/7939" target="_top">#7939</a>.
1402         </li>
1403 <li class="listitem">
1404           Fixed a potential data race in the Linux <code class="computeroutput">epoll</code> implementation.
1405         </li>
1406 <li class="listitem">
1407           Fixed a Windows-specific bug, where certain operations might generate an
1408           <code class="computeroutput">error_code</code> with an invalid (i.e. <code class="computeroutput">NULL</code>) <code class="computeroutput">error_category</code>
1409           <a href="https://svn.boost.org/trac/boost/ticket/8613" target="_top">#8613</a>.
1410         </li>
1411 <li class="listitem">
1412           Fixed <code class="computeroutput">basic_waitable_timer</code>'s underlying implementation so
1413           that it can handle any <code class="computeroutput">time_point</code> value without overflowing
1414           the intermediate duration objects.
1415         </li>
1416 <li class="listitem">
1417           Fixed a problem with lost thread wakeups that can occur when making concurrent
1418           calls to <code class="computeroutput">run()</code> and <code class="computeroutput">poll()</code> on the same <code class="computeroutput">io_service</code>
1419           object <a href="https://svn.boost.org/trac/boost/ticket/8354" target="_top">#8354</a>.
1420         </li>
1421 <li class="listitem">
1422           Fixed implementation of asynchronous connect operation so that it can cope
1423           with spurious readiness notifications from the reactor <a href="https://svn.boost.org/trac/boost/ticket/7961" target="_top">#7961</a>.
1424         </li>
1425 <li class="listitem">
1426           Fixed a memory leak in the <code class="computeroutput">ssl::rfc2818_verification</code> class.
1427         </li>
1428 <li class="listitem">
1429           Added a mechanism for disabling automatic Winsock initialisation <a href="https://svn.boost.org/trac/boost/ticket/3605" target="_top">#3605</a>.
1430           See the header file <code class="literal">boost/asio/detail/winsock_init.hpp</code>
1431           for details.
1432         </li>
1433 </ul></div>
1434 <h4>
1435 <a name="boost_asio.history.h17"></a>
1436       <span class="phrase"><a name="boost_asio.history.asio_1_8_3___boost_1_53"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_8_3___boost_1_53">Asio
1437       1.8.3 / Boost 1.53</a>
1438     </h4>
1439 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1440 <li class="listitem">
1441           Fixed some 64-to-32-bit conversion warnings (<a href="https://svn.boost.org/trac/boost/ticket/7459" target="_top">#7459</a>).
1442         </li>
1443 <li class="listitem">
1444           Fixed some small errors in documentation and comments (<a href="https://svn.boost.org/trac/boost/ticket/7761" target="_top">#7761</a>).
1445         </li>
1446 <li class="listitem">
1447           Fixed an error in the example embedded in <code class="computeroutput">basic_socket::get_option</code>'s
1448           documentation (<a href="https://svn.boost.org/trac/boost/ticket/7562" target="_top">#7562</a>).
1449         </li>
1450 <li class="listitem">
1451           Changed to use <code class="computeroutput">long</code> rather than <code class="computeroutput">int</code> for SSL_CTX
1452           options, to match OpenSSL (<a href="https://svn.boost.org/trac/boost/ticket/7209" target="_top">#7209</a>).
1453         </li>
1454 <li class="listitem">
1455           Changed to use <code class="computeroutput">_snwprintf</code> to address a compile error due to
1456           the changed <code class="computeroutput">swprintf</code> signature in recent versions of MinGW
1457           (<a href="https://svn.boost.org/trac/boost/ticket/7373" target="_top">#7373</a>).
1458         </li>
1459 <li class="listitem">
1460           Fixed a deadlock that can occur on Windows when shutting down a pool of
1461           <code class="computeroutput">io_service</code> threads due to running out of work (<a href="https://svn.boost.org/trac/boost/ticket/7552" target="_top">#7552</a>).
1462         </li>
1463 <li class="listitem">
1464           Enabled the <code class="computeroutput">noexcept</code> qualifier for error categories (<a href="https://svn.boost.org/trac/boost/ticket/7797" target="_top">#7797</a>).
1465         </li>
1466 <li class="listitem">
1467           Changed UNIX domain socket example to treat errors from <code class="computeroutput">accept</code>
1468           as non-fatal (<a href="https://svn.boost.org/trac/boost/ticket/7488" target="_top">#7488</a>).
1469         </li>
1470 <li class="listitem">
1471           Added a small block recycling optimisation to improve default memory allocation
1472           behaviour.
1473         </li>
1474 </ul></div>
1475 <h4>
1476 <a name="boost_asio.history.h18"></a>
1477       <span class="phrase"><a name="boost_asio.history.asio_1_8_2___boost_1_51"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_8_2___boost_1_51">Asio
1478       1.8.2 / Boost 1.51</a>
1479     </h4>
1480 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1481 <li class="listitem">
1482           Fixed an incompatibility between <code class="computeroutput">ip::tcp::iostream</code> and C++11
1483           (<a href="https://svn.boost.org/trac/boost/ticket/7162" target="_top">#7162</a>).
1484         </li>
1485 <li class="listitem">
1486           Decorated GCC attribute names with underscores to prevent interaction with
1487           user-defined macros (<a href="https://svn.boost.org/trac/boost/ticket/6415" target="_top">#6415</a>).
1488         </li>
1489 <li class="listitem">
1490           Added missing <code class="computeroutput">#include &lt;cctype&gt;</code>, needed for some versions
1491           of MinGW.
1492         </li>
1493 <li class="listitem">
1494           Changed to use <code class="literal">gcc</code>'s atomic builtins on ARM CPUs, when
1495           available (<a href="https://svn.boost.org/trac/boost/ticket/7140" target="_top">#7140</a>).
1496         </li>
1497 <li class="listitem">
1498           Changed strand destruction to be a no-op, to allow strand objects to be
1499           destroyed after their associated <code class="computeroutput">io_service</code> has been destroyed.
1500         </li>
1501 <li class="listitem">
1502           Added support for some newer versions of glibc which provide the <code class="computeroutput">epoll_create1()</code>
1503           function but always fail with <code class="computeroutput">ENOSYS</code> (<a href="https://svn.boost.org/trac/boost/ticket/7012" target="_top">#7012</a>).
1504         </li>
1505 <li class="listitem">
1506           Changed the SSL implementation to throw an exception if SSL engine initialisation
1507           fails (<a href="https://svn.boost.org/trac/boost/ticket/6303" target="_top">#6303</a>).
1508         </li>
1509 <li class="listitem">
1510           Fixed another regression in <code class="computeroutput">buffered_write_stream</code> (<a href="https://svn.boost.org/trac/boost/ticket/6310" target="_top">#6310</a>).
1511         </li>
1512 <li class="listitem">
1513           Implemented various minor performance improvements, primarily targeted
1514           at Linux x86 and x86-64 platforms.
1515         </li>
1516 </ul></div>
1517 <h4>
1518 <a name="boost_asio.history.h19"></a>
1519       <span class="phrase"><a name="boost_asio.history.asio_1_8_1___boost_1_50"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_8_1___boost_1_50">Asio
1520       1.8.1 / Boost 1.50</a>
1521     </h4>
1522 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1523 <li class="listitem">
1524           Changed the <code class="computeroutput">epoll_reactor</code> backend to do lazy registration
1525           for <code class="computeroutput">EPOLLOUT</code> events.
1526         </li>
1527 <li class="listitem">
1528           Fixed the <code class="computeroutput">epoll_reactor</code> handling of out-of-band data, which
1529           was broken by an incomplete fix in the last release.
1530         </li>
1531 <li class="listitem">
1532           Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput">OPENSSL_NO_ENGINE</code>
1533           feature test <code class="computeroutput">#define</code> (<a href="https://svn.boost.org/trac/boost/ticket/6432" target="_top">#6432</a>).
1534         </li>
1535 <li class="listitem">
1536           Fixed <code class="computeroutput">windows::object_handle</code> so that it works with Windows
1537           compilers that support C++11 move semantics (such as <code class="literal">g++</code>).
1538         </li>
1539 <li class="listitem">
1540           Improved the performance of strand rescheduling.
1541         </li>
1542 <li class="listitem">
1543           Added support for <code class="literal">g++</code> 4.7 when compiling in C++11 mode
1544           (<a href="https://svn.boost.org/trac/boost/ticket/6620" target="_top">#6620</a>).
1545         </li>
1546 <li class="listitem">
1547           Fixed a problem where <code class="computeroutput">signal_set</code> handlers were not being delivered
1548           when the <code class="computeroutput">io_service</code> was constructed with a <code class="computeroutput">concurrency_hint</code>
1549           of 1 (<a href="https://svn.boost.org/trac/boost/ticket/6657" target="_top">#6657</a>).
1550         </li>
1551 </ul></div>
1552 <h4>
1553 <a name="boost_asio.history.h20"></a>
1554       <span class="phrase"><a name="boost_asio.history.asio_1_8_0___boost_1_49"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_8_0___boost_1_49">Asio
1555       1.8.0 / Boost 1.49</a>
1556     </h4>
1557 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1558 <li class="listitem">
1559           Added a new class template <code class="computeroutput">basic_waitable_timer</code> based around
1560           the C++11 clock type requirements. It may be used with the clocks from
1561           the C++11 <code class="computeroutput">&lt;chrono&gt;</code> library facility or, if those are
1562           not available, Boost.Chrono. The typedefs <code class="computeroutput">high_resolution_timer</code>,
1563           <code class="computeroutput">steady_timer</code> and <code class="computeroutput">system_timer</code> may be used to
1564           create timer objects for the standard clock types.
1565         </li>
1566 <li class="listitem">
1567           Added a new <code class="computeroutput">windows::object_handle</code> class for performing waits
1568           on Windows kernel objects. Thanks go to Boris Schaeling for contributing
1569           substantially to the development of this feature.
1570         </li>
1571 <li class="listitem">
1572           On Linux, <code class="computeroutput">connect()</code> can return EAGAIN in certain circumstances.
1573           Remapped this to another error so that it doesn't look like a non-blocking
1574           operation (<a href="https://svn.boost.org/trac/boost/ticket/6048" target="_top">#6048</a>).
1575         </li>
1576 <li class="listitem">
1577           Fixed a compile error on NetBSD (<a href="https://svn.boost.org/trac/boost/ticket/6098" target="_top">#6098</a>).
1578         </li>
1579 <li class="listitem">
1580           Fixed deadlock on Mac OS X (<a href="https://svn.boost.org/trac/boost/ticket/6275" target="_top">#6275</a>).
1581         </li>
1582 <li class="listitem">
1583           Fixed a regression in <code class="computeroutput">buffered_write_stream</code> (<a href="https://svn.boost.org/trac/boost/ticket/6310" target="_top">#6310</a>).
1584         </li>
1585 <li class="listitem">
1586           Fixed a non-paged pool "leak" on Windows when an <code class="computeroutput">io_service</code>
1587           is repeatedly run without anything to do (<a href="https://svn.boost.org/trac/boost/ticket/6321" target="_top">#6321</a>).
1588         </li>
1589 <li class="listitem">
1590           Reverted earlier change to allow some speculative operations to be performed
1591           without holding the lock, as it introduced a race condition in some multithreaded
1592           scenarios.
1593         </li>
1594 <li class="listitem">
1595           Fixed a bug where the second buffer in an array of two buffers may be ignored
1596           if the first buffer is empty.
1597         </li>
1598 </ul></div>
1599 <h4>
1600 <a name="boost_asio.history.h21"></a>
1601       <span class="phrase"><a name="boost_asio.history.asio_1_6_1___boost_1_48"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_6_1___boost_1_48">Asio
1602       1.6.1 / Boost 1.48</a>
1603     </h4>
1604 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1605 <li class="listitem">
1606           Implemented various performance improvements, including:
1607           <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
1608 <li class="listitem">
1609                 Using thread-local operation queues in single-threaded use cases
1610                 (i.e. when <code class="computeroutput">concurrency_hint</code> is 1) to eliminate a lock/unlock
1611                 pair.
1612               </li>
1613 <li class="listitem">
1614                 Allowing some <code class="computeroutput">epoll_reactor</code> speculative operations to
1615                 be performed without holding the lock.
1616               </li>
1617 <li class="listitem">
1618                 Improving locality of reference by performing an <code class="computeroutput">epoll_reactor</code>'s
1619                 I/O operation immediately before the corresponding handler is called.
1620                 This also improves scalability across CPUs when multiple threads
1621                 are running the <code class="computeroutput">io_service</code>.
1622               </li>
1623 <li class="listitem">
1624                 Specialising asynchronous read and write operations for buffer sequences
1625                 that are arrays (<code class="computeroutput">boost::array</code> or <code class="computeroutput">std::array</code>)
1626                 of exactly two buffers.
1627               </li>
1628 </ul></div>
1629         </li>
1630 <li class="listitem">
1631           Fixed a compile error in the regex overload of <code class="computeroutput">async_read_until</code>
1632           (<a href="https://svn.boost.org/trac/boost/ticket/5688" target="_top">#5688</a>).
1633         </li>
1634 <li class="listitem">
1635           Fixed a Windows-specific compile error by explicitly specifying the <code class="computeroutput">signal()</code>
1636           function from the global namespace (<a href="https://svn.boost.org/trac/boost/ticket/5722" target="_top">#5722</a>).
1637         </li>
1638 <li class="listitem">
1639           Changed the <code class="computeroutput">deadline_timer</code> implementation so that it does
1640           not read the clock unless the timer heap is non-empty.
1641         </li>
1642 <li class="listitem">
1643           Changed the SSL stream's buffers' sizes so that they are large enough to
1644           hold a complete TLS record (<a href="https://svn.boost.org/trac/boost/ticket/5854" target="_top">#5854</a>).
1645         </li>
1646 <li class="listitem">
1647           Fixed the behaviour of the synchronous <code class="computeroutput">null_buffers</code> operations
1648           so that they obey the user's non-blocking setting (<a href="https://svn.boost.org/trac/boost/ticket/5756" target="_top">#5756</a>).
1649         </li>
1650 <li class="listitem">
1651           Changed to set the size of the select <code class="computeroutput">fd_set</code> at runtime when
1652           using Windows.
1653         </li>
1654 <li class="listitem">
1655           Disabled an MSVC warning due to const qualifier being applied to function
1656           type.
1657         </li>
1658 <li class="listitem">
1659           Fixed a crash that occurs when using the Intel C++ compiler (<a href="https://svn.boost.org/trac/boost/ticket/5763" target="_top">#5763</a>).
1660         </li>
1661 <li class="listitem">
1662           Changed the initialisation of the OpenSSL library so that it supports all
1663           available algorithms.
1664         </li>
1665 <li class="listitem">
1666           Fixed the SSL error mapping used when the session is gracefully shut down.
1667         </li>
1668 <li class="listitem">
1669           Added some latency test programs.
1670         </li>
1671 <li class="listitem">
1672           Clarified that a read operation ends when the buffer is full (<a href="https://svn.boost.org/trac/boost/ticket/5999" target="_top">#5999</a>).
1673         </li>
1674 <li class="listitem">
1675           Fixed an exception safety issue in <code class="computeroutput">epoll_reactor</code> initialisation
1676           (<a href="https://svn.boost.org/trac/boost/ticket/6006" target="_top">#6006</a>).
1677         </li>
1678 <li class="listitem">
1679           Made the number of strand implementations configurable by defining <code class="computeroutput">BOOST_ASIO_STRAND_IMPLEMENTATIONS</code>
1680           to the desired number.
1681         </li>
1682 <li class="listitem">
1683           Added support for a new <code class="computeroutput">BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION</code>
1684           flag which switches the allocation of strand implementations to use a round-robin
1685           approach rather than hashing.
1686         </li>
1687 <li class="listitem">
1688           Fixed potential strand starvation issue that can occur when <code class="computeroutput">strand.post()</code>
1689           is used.
1690         </li>
1691 </ul></div>
1692 <h4>
1693 <a name="boost_asio.history.h22"></a>
1694       <span class="phrase"><a name="boost_asio.history.asio_1_6_0___boost_1_47"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_6_0___boost_1_47">Asio
1695       1.6.0 / Boost 1.47</a>
1696     </h4>
1697 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1698 <li class="listitem">
1699           Added support for signal handling, using a new class called <code class="computeroutput">signal_set</code>.
1700           Programs may add one or more signals to the set, and then perform an <code class="computeroutput">async_wait()</code>
1701           operation. The specified handler will be called when one of the signals
1702           occurs. The same signal number may be registered with multiple <code class="computeroutput">signal_set</code>
1703           objects, however the signal number must be used only with Asio. Addresses
1704           <a href="https://svn.boost.org/trac/boost/ticket/2879" target="_top">#2879</a>.
1705         </li>
1706 <li class="listitem">
1707           Added handler tracking, a new debugging aid. When enabled by defining
1708           <code class="computeroutput">BOOST_ASIO_ENABLE_HANDLER_TRACKING</code>, Asio writes debugging
1709           output to the standard error stream. The output records asynchronous operations
1710           and the relationships between their handlers. It may be post-processed
1711           using the included <code class="literal">handlerviz.pl</code> tool to create a visual
1712           representation of the handlers (requires GraphViz).
1713         </li>
1714 <li class="listitem">
1715           Added support for timeouts on socket iostreams, such as <code class="computeroutput">ip::tcp::iostream</code>.
1716           A timeout is set by calling <code class="computeroutput">expires_at()</code> or <code class="computeroutput">expires_from_now()</code>
1717           to establish a deadline. Any socket operations which occur past the deadline
1718           will put the iostream into a bad state.
1719         </li>
1720 <li class="listitem">
1721           Added a new <code class="computeroutput">error()</code> member function to socket iostreams, for
1722           retrieving the error code from the most recent system call.
1723         </li>
1724 <li class="listitem">
1725           Added a new <code class="computeroutput">basic_deadline_timer::cancel_one()</code> function. This
1726           function lets you cancel a single waiting handler on a timer. Handlers
1727           are cancelled in FIFO order.
1728         </li>
1729 <li class="listitem">
1730           Added a new <code class="computeroutput">transfer_exactly()</code> completion condition. This
1731           can be used to send or receive a specified number of bytes even if the
1732           total size of the buffer (or buffer sequence) is larger.
1733         </li>
1734 <li class="listitem">
1735           Added new free functions <code class="computeroutput">connect()</code> and <code class="computeroutput">async_connect()</code>.
1736           These operations try each endpoint in a list until the socket is successfully
1737           connected, and are useful for creating TCP clients that work with both
1738           IPv4 and IPv6.
1739         </li>
1740 <li class="listitem">
1741           Extended the <code class="computeroutput">buffer_size()</code> function so that it works for buffer
1742           sequences in addition to individual buffers.
1743         </li>
1744 <li class="listitem">
1745           Added a new <code class="computeroutput">buffer_copy()</code> function that can be used to copy
1746           the raw bytes between individual buffers and buffer sequences.
1747         </li>
1748 <li class="listitem">
1749           Added new non-throwing overloads of <code class="computeroutput">read()</code>, <code class="computeroutput">read_at()</code>,
1750           <code class="computeroutput">write()</code> and <code class="computeroutput">write_at()</code> that do not require a
1751           completion condition.
1752         </li>
1753 <li class="listitem">
1754           Added friendlier compiler errors for when a completion handler does not
1755           meet the necessary type requirements. When C++0x is available (currently
1756           supported for <code class="literal">g++</code> 4.5 or later, and MSVC 10), <code class="computeroutput">static_assert</code>
1757           is also used to generate an informative error message. This checking may
1758           be disabled by defining <code class="computeroutput">BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS</code>.
1759         </li>
1760 <li class="listitem">
1761           Added a new, completely rewritten SSL implementation. The new implementation
1762           compiles faster, shows substantially improved performance, and supports
1763           custom memory allocation and handler invocation. It includes new API features
1764           such as certificate verification callbacks and has improved error reporting.
1765           The new implementation is source-compatible with the old for most uses.
1766           However, if necessary, the old implementation may still be used by defining
1767           <code class="computeroutput">BOOST_ASIO_ENABLE_OLD_SSL</code>. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3702" target="_top">#3702</a>,
1768           <a href="https://svn.boost.org/trac/boost/ticket/3958" target="_top">#3958</a>.
1769         </li>
1770 <li class="listitem">
1771           Changed the separate compilation support such that, to use Asio's SSL capabilities,
1772           you should also include <code class="computeroutput">boost/asio/ssl/impl/src.hpp</code> in one
1773           source file in your program.
1774         </li>
1775 <li class="listitem">
1776           Changed the SSL implementation to support build environments where SSL
1777           v2 is explicitly disabled (<a href="https://svn.boost.org/trac/boost/ticket/5453" target="_top">#5453</a>).
1778         </li>
1779 <li class="listitem">
1780           Made the <code class="computeroutput">is_loopback()</code>, <code class="computeroutput">is_unspecified()</code> and
1781           <code class="computeroutput">is_multicast()</code> functions consistently available across the
1782           <code class="computeroutput">ip::address</code>, <code class="computeroutput">ip::address_v4</code> and <code class="computeroutput">ip::address_v6</code>
1783           classes (<a href="https://svn.boost.org/trac/boost/ticket/3939" target="_top">#3939</a>).
1784         </li>
1785 <li class="listitem">
1786           Added new <code class="computeroutput">non_blocking()</code> functions for managing the non-blocking
1787           behaviour of a socket or descriptor. The <code class="computeroutput">io_control()</code> commands
1788           named <code class="computeroutput">non_blocking_io</code> are now deprecated in favour of these
1789           new functions.
1790         </li>
1791 <li class="listitem">
1792           Added new <code class="computeroutput">native_non_blocking()</code> functions for managing the
1793           non-blocking mode of the underlying socket or descriptor. These functions
1794           are intended to allow the encapsulation of arbitrary non-blocking system
1795           calls as asynchronous operations, in a way that is transparent to the user
1796           of the socket object. The functions have no effect on the behaviour of
1797           the synchronous operations of the socket or descriptor.
1798         </li>
1799 <li class="listitem">
1800           Added the <code class="computeroutput">io_control()</code> member function for socket acceptors
1801           (<a href="https://svn.boost.org/trac/boost/ticket/3297" target="_top">#3297</a>).
1802         </li>
1803 <li class="listitem">
1804           Added a <code class="computeroutput">release()</code> member function to posix descriptors. This
1805           function releases ownership of the underlying native descriptor to the
1806           caller. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3900" target="_top">#3900</a>.
1807         </li>
1808 <li class="listitem">
1809           Added support for sequenced packet sockets (<code class="computeroutput">SOCK_SEQPACKET</code>).
1810         </li>
1811 <li class="listitem">
1812           Added a new <code class="computeroutput">io_service::stopped()</code> function that can be used
1813           to determine whether the <code class="computeroutput">io_service</code> has stopped (i.e. a <code class="computeroutput">reset()</code>
1814           call is needed prior to any further calls to <code class="computeroutput">run()</code>, <code class="computeroutput">run_one()</code>,
1815           <code class="computeroutput">poll()</code> or <code class="computeroutput">poll_one()</code>).
1816         </li>
1817 <li class="listitem">
1818           For consistency with the C++0x standard library, deprecated the <code class="computeroutput">native_type</code>
1819           typedefs in favour of <code class="computeroutput">native_handle_type</code>, and the <code class="computeroutput">native()</code>
1820           member functions in favour of <code class="computeroutput">native_handle()</code>.
1821         </li>
1822 <li class="listitem">
1823           Added support for C++0x move construction and assignment to sockets, serial
1824           ports, POSIX descriptors and Windows handles.
1825         </li>
1826 <li class="listitem">
1827           Reduced the copying of handler function objects.
1828         </li>
1829 <li class="listitem">
1830           Added support for C++0x move construction to further reduce (and in some
1831           cases eliminate) copying of handler objects.
1832         </li>
1833 <li class="listitem">
1834           Added support for the <code class="computeroutput">fork()</code> system call. Programs that use
1835           <code class="computeroutput">fork()</code> must call <code class="computeroutput">io_service.notify_fork()</code> at
1836           the appropriate times. Two new examples have been added showing how to
1837           use this feature. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3238" target="_top">#3238</a>,
1838           <a href="https://svn.boost.org/trac/boost/ticket/4162" target="_top">#4162</a>.
1839         </li>
1840 <li class="listitem">
1841           Cleaned up the handling of errors reported by the <code class="computeroutput">close()</code>
1842           system call. In particular, assume that most operating systems won't have
1843           <code class="computeroutput">close()</code> fail with <code class="computeroutput">EWOULDBLOCK</code>, but if it does
1844           then set the blocking mode and restart the call. If any other error occurs,
1845           assume the descriptor is closed. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3307" target="_top">#3307</a>.
1846         </li>
1847 <li class="listitem">
1848           Added new <code class="computeroutput">asio::buffer()</code> overloads for <code class="computeroutput">std::array</code>,
1849           when available.
1850         </li>
1851 <li class="listitem">
1852           Changed the implementation to use the C++0x standard library templates
1853           <code class="computeroutput">array</code>, <code class="computeroutput">shared_ptr</code>, <code class="computeroutput">weak_ptr</code> and
1854           <code class="computeroutput">atomic</code> when they are available, rather than the Boost equivalents.
1855         </li>
1856 <li class="listitem">
1857           Use C++0x variadic templates when available, rather than generating function
1858           overloads using Boost.Preprocessor.
1859         </li>
1860 <li class="listitem">
1861           Changed exception reporting to include the function name in exception
1862           <code class="computeroutput">what()</code> messages.
1863         </li>
1864 <li class="listitem">
1865           Fixed insufficient initialisers warning with MinGW.
1866         </li>
1867 <li class="listitem">
1868           Changed the <code class="computeroutput">shutdown_service()</code> member functions to be private.
1869         </li>
1870 <li class="listitem">
1871           Added archetypes for testing socket option functions.
1872         </li>
1873 <li class="listitem">
1874           Changed the Boost.Asio examples so that they don't use Boost.Thread's convenience
1875           header. Use the header file that is specifically for the boost::thread
1876           class instead.
1877         </li>
1878 <li class="listitem">
1879           Removed the dependency on OS-provided macros for the well-known IPv4 and
1880           IPv6 addresses. This should eliminate annoying "missing braces around
1881           initializer" warnings (<a href="https://svn.boost.org/trac/boost/ticket/3741" target="_top">#3741</a>).
1882         </li>
1883 <li class="listitem">
1884           Reduced the size of <code class="computeroutput">ip::basic_endpoint&lt;&gt;</code> objects (such
1885           as <code class="computeroutput">ip::tcp::endpoint</code> and <code class="computeroutput">ip::udp::endpoint</code>).
1886         </li>
1887 <li class="listitem">
1888           Changed the reactor backends to assume that any descriptors or sockets
1889           added using <code class="computeroutput">assign()</code> may have been <code class="computeroutput">dup()</code>-ed,
1890           and so require explicit deregistration from the reactor (<a href="https://svn.boost.org/trac/boost/ticket/4971" target="_top">#4971</a>).
1891         </li>
1892 <li class="listitem">
1893           Removed the deprecated member functions named <code class="computeroutput">io_service()</code>.
1894           The <code class="computeroutput">get_io_service()</code> member functions should be used instead.
1895         </li>
1896 <li class="listitem">
1897           Removed the deprecated typedefs <code class="computeroutput">resolver_query</code> and <code class="computeroutput">resolver_iterator</code>
1898           from the <code class="computeroutput">ip::tcp</code>, <code class="computeroutput">ip::udp</code> and <code class="computeroutput">ip::icmp</code>
1899           classes.
1900         </li>
1901 <li class="listitem">
1902           Modified the <code class="computeroutput">buffers_iterator&lt;&gt;</code> and <code class="computeroutput">ip::basic_resolver_iterator</code>
1903           classes so that the value_type typedefs are non-const byte types.
1904         </li>
1905 <li class="listitem">
1906           Fixed warnings reported by g++'s <code class="literal">-Wshadow</code> compiler option
1907           (<a href="https://svn.boost.org/trac/boost/ticket/3905" target="_top">#3905</a>).
1908         </li>
1909 <li class="listitem">
1910           Added an explicit cast to convert the <code class="computeroutput">FIONBIO</code> constant to
1911           int, to suppress a compiler warning on some platforms (<a href="https://svn.boost.org/trac/boost/ticket/5128" target="_top">#5128</a>).
1912         </li>
1913 <li class="listitem">
1914           Changed most examples to treat a failure by an accept operation as non-fatal
1915           (<a href="https://svn.boost.org/trac/boost/ticket/5124" target="_top">#5124</a>).
1916         </li>
1917 <li class="listitem">
1918           Fixed an error in the <code class="literal">tick_count_timer</code> example by making
1919           the duration type signed. Previously, a wait on an already-passed deadline
1920           would not return for a very long time (<a href="https://svn.boost.org/trac/boost/ticket/5418" target="_top">#5418</a>).
1921         </li>
1922 </ul></div>
1923 <h4>
1924 <a name="boost_asio.history.h23"></a>
1925       <span class="phrase"><a name="boost_asio.history.asio_1_4_9___boost_1_46_1"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_9___boost_1_46_1">Asio
1926       1.4.9 / Boost 1.46.1</a>
1927     </h4>
1928 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1929 <li class="listitem">
1930           <code class="computeroutput">EV_ONESHOT</code> seems to cause problems on some versions of Mac
1931           OS X, with the <code class="computeroutput">io_service</code> destructor getting stuck inside
1932           the <code class="computeroutput">close()</code> system call. Changed the kqueue backend to use
1933           <code class="computeroutput">EV_CLEAR</code> instead (<a href="https://svn.boost.org/trac/boost/ticket/5021" target="_top">#5021</a>).
1934         </li>
1935 <li class="listitem">
1936           Fixed compile failures with some versions of <code class="literal">g++</code> due
1937           to the use of anonymous enums (<a href="https://svn.boost.org/trac/boost/ticket/4883" target="_top">#4883</a>).
1938         </li>
1939 <li class="listitem">
1940           Fixed a bug on kqueue-based platforms, where some system calls that repeatedly
1941           fail with <code class="computeroutput">EWOULDBLOCK</code> are not correctly re-registered with
1942           kqueue.
1943         </li>
1944 <li class="listitem">
1945           Changed <code class="computeroutput">asio::streambuf</code> to ensure that its internal pointers
1946           are updated correctly after the data has been modified using <code class="computeroutput">std::streambuf</code>
1947           member functions.
1948         </li>
1949 <li class="listitem">
1950           Fixed a bug that prevented the linger socket option from working on platforms
1951           other than Windows.
1952         </li>
1953 </ul></div>
1954 <h4>
1955 <a name="boost_asio.history.h24"></a>
1956       <span class="phrase"><a name="boost_asio.history.asio_1_4_8___boost_1_46"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_8___boost_1_46">Asio
1957       1.4.8 / Boost 1.46</a>
1958     </h4>
1959 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1960 <li class="listitem">
1961           Fixed an integer overflow problem that occurs when <code class="computeroutput">ip::address_v4::broadcast()</code>
1962           is used on 64-bit platforms.
1963         </li>
1964 <li class="listitem">
1965           Fixed a problem on older Linux kernels (where epoll is used without timerfd
1966           support) that prevents timely delivery of deadline_timer handlers, after
1967           the program has been running for some time (<a href="https://svn.boost.org/trac/boost/ticket/5045" target="_top">#5045</a>).
1968         </li>
1969 </ul></div>
1970 <h4>
1971 <a name="boost_asio.history.h25"></a>
1972       <span class="phrase"><a name="boost_asio.history.asio_1_4_7___boost_1_45"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_7___boost_1_45">Asio
1973       1.4.7 / Boost 1.45</a>
1974     </h4>
1975 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1976 <li class="listitem">
1977           Fixed a problem on kqueue-based platforms where a <code class="computeroutput">deadline_timer</code>
1978           may never fire if the <code class="computeroutput">io_service</code> is running in a background
1979           thread (<a href="https://svn.boost.org/trac/boost/ticket/4568" target="_top">#4568</a>).
1980         </li>
1981 <li class="listitem">
1982           Fixed a const-correctness issue that prevented valid uses of <code class="computeroutput">has_service&lt;&gt;</code>
1983           from compiling (<a href="https://svn.boost.org/trac/boost/ticket/4638" target="_top">#4638</a>).
1984         </li>
1985 <li class="listitem">
1986           Fixed MinGW cross-compilation (<a href="https://svn.boost.org/trac/boost/ticket/4491" target="_top">#4491</a>).
1987         </li>
1988 <li class="listitem">
1989           Removed dependency on deprecated Boost.System functions (<a href="https://svn.boost.org/trac/boost/ticket/4672" target="_top">#4672</a>).
1990         </li>
1991 <li class="listitem">
1992           Ensured <code class="computeroutput">close()</code>/<code class="computeroutput">closesocket()</code> failures are correctly
1993           propagated (<a href="https://svn.boost.org/trac/boost/ticket/4573" target="_top">#4573</a>).
1994         </li>
1995 <li class="listitem">
1996           Added a check for errors returned by <code class="computeroutput">InitializeCriticalSectionAndSpinCount</code>
1997           (<a href="https://svn.boost.org/trac/boost/ticket/4574" target="_top">#4574</a>).
1998         </li>
1999 <li class="listitem">
2000           Added support for hardware flow control on QNX (<a href="https://svn.boost.org/trac/boost/ticket/4625" target="_top">#4625</a>).
2001         </li>
2002 <li class="listitem">
2003           Always use <code class="computeroutput">pselect()</code> on HP-UX, if it is available (<a href="https://svn.boost.org/trac/boost/ticket/4578" target="_top">#4578</a>).
2004         </li>
2005 <li class="listitem">
2006           Ensured handler arguments are passed as lvalues (<a href="https://svn.boost.org/trac/boost/ticket/4744" target="_top">#4744</a>).
2007         </li>
2008 <li class="listitem">
2009           Fixed Windows build when thread support is disabled (<a href="https://svn.boost.org/trac/boost/ticket/4680" target="_top">#4680</a>).
2010         </li>
2011 <li class="listitem">
2012           Fixed a Windows-specific problem where <code class="computeroutput">deadline_timer</code> objects
2013           with expiry times set more than 5 minutes in the future may never expire
2014           (<a href="https://svn.boost.org/trac/boost/ticket/4745" target="_top">#4745</a>).
2015         </li>
2016 <li class="listitem">
2017           Fixed the <code class="computeroutput">resolver</code> backend on BSD platforms so that an empty
2018           service name resolves to port number <code class="computeroutput">0</code>, as per the documentation
2019           (<a href="https://svn.boost.org/trac/boost/ticket/4690" target="_top">#4690</a>).
2020         </li>
2021 <li class="listitem">
2022           Fixed read operations so that they do not accept buffer sequences of type
2023           <code class="computeroutput">const_buffers_1</code> (<a href="https://svn.boost.org/trac/boost/ticket/4746" target="_top">#4746</a>).
2024         </li>
2025 <li class="listitem">
2026           Redefined <code class="computeroutput">Protocol</code> and <code class="computeroutput">id</code> to avoid clashing with
2027           Objective-C++ keywords (<a href="https://svn.boost.org/trac/boost/ticket/4191" target="_top">#4191</a>).
2028         </li>
2029 <li class="listitem">
2030           Fixed a <code class="computeroutput">vector</code> reallocation performance issue that can occur
2031           when there are many active <code class="computeroutput">deadline_timer</code> objects (<a href="https://svn.boost.org/trac/boost/ticket/4780" target="_top">#4780</a>).
2032         </li>
2033 <li class="listitem">
2034           Fixed the kqueue backend so that it compiles on NetBSD (<a href="https://svn.boost.org/trac/boost/ticket/4662" target="_top">#4662</a>).
2035         </li>
2036 <li class="listitem">
2037           Fixed the socket <code class="computeroutput">io_control()</code> implementation on 64-bit Mac
2038           OS X and BSD platforms (<a href="https://svn.boost.org/trac/boost/ticket/4782" target="_top">#4782</a>).
2039         </li>
2040 <li class="listitem">
2041           Fixed a Windows-specific problem where failures from <code class="computeroutput">accept()</code>
2042           are incorrectly treated as successes (<a href="https://svn.boost.org/trac/boost/ticket/4859" target="_top">#4859</a>).
2043         </li>
2044 <li class="listitem">
2045           Deprecated the separate compilation header <code class="computeroutput">&lt;boost/asio/impl/src.cpp&gt;</code>
2046           in favour of <code class="computeroutput">&lt;boost/asio/impl/src.hpp&gt;</code> (<a href="https://svn.boost.org/trac/boost/ticket/4560" target="_top">#4560</a>).
2047         </li>
2048 </ul></div>
2049 <h4>
2050 <a name="boost_asio.history.h26"></a>
2051       <span class="phrase"><a name="boost_asio.history.asio_1_4_6___boost_1_44"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_6___boost_1_44">Asio
2052       1.4.6 / Boost 1.44</a>
2053     </h4>
2054 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2055 <li class="listitem">
2056           Reduced compile times. (Note that some programs may need to add additional
2057           <code class="computeroutput">#include</code>s, e.g. if the program uses <code class="computeroutput">boost::array</code>
2058           but does not explicitly include <code class="computeroutput">&lt;boost/array.hpp&gt;</code>.)
2059         </li>
2060 <li class="listitem">
2061           Reduced the size of generated code.
2062         </li>
2063 <li class="listitem">
2064           Refactored <code class="computeroutput">deadline_timer</code> implementation to improve performance.
2065         </li>
2066 <li class="listitem">
2067           Improved multiprocessor scalability on Windows by using a dedicated hidden
2068           thread to wait for timers.
2069         </li>
2070 <li class="listitem">
2071           Improved performance of <code class="computeroutput">asio::streambuf</code> with <code class="computeroutput">async_read()</code>
2072           and <code class="computeroutput">async_read_until()</code>. These read operations now use the
2073           existing capacity of the <code class="computeroutput">streambuf</code> when reading, rather than
2074           limiting the read to 512 bytes.
2075         </li>
2076 <li class="listitem">
2077           Added optional separate compilation. To enable, add <code class="computeroutput">#include &lt;boost/asio/impl/src.cpp&gt;</code>
2078           to one source file in a program, then build the program with <code class="computeroutput">BOOST_ASIO_SEPARATE_COMPILATION</code>
2079           defined in the project/compiler settings. Alternatively, <code class="computeroutput">BOOST_ASIO_DYN_LINK</code>
2080           may be defined to build a separately-compiled Asio as part of a shared
2081           library.
2082         </li>
2083 <li class="listitem">
2084           Added new macro <code class="computeroutput">BOOST_ASIO_DISABLE_FENCED_BLOCK</code> to permit
2085           the disabling of memory fences around completion handlers, even if thread
2086           support is enabled.
2087         </li>
2088 <li class="listitem">
2089           Reworked timeout examples to better illustrate typical use cases.
2090         </li>
2091 <li class="listitem">
2092           Ensured that handler arguments are passed as <code class="computeroutput">const</code> types.
2093         </li>
2094 <li class="listitem">
2095           Fixed incorrect parameter order in <code class="computeroutput">null_buffers</code> variant of
2096           <code class="computeroutput">async_send_to</code> (<a href="https://svn.boost.org/trac/boost/ticket/4170" target="_top">#4170</a>).
2097         </li>
2098 <li class="listitem">
2099           Ensured <code class="computeroutput">unsigned char</code> is used with <code class="computeroutput">isdigit</code> in
2100           <code class="computeroutput">getaddrinfo</code> emulation (<a href="https://svn.boost.org/trac/boost/ticket/4201" target="_top">#4201</a>).
2101         </li>
2102 <li class="listitem">
2103           Fixed handling of very small but non-zero timeouts (<a href="https://svn.boost.org/trac/boost/ticket/4205" target="_top">#4205</a>).
2104         </li>
2105 <li class="listitem">
2106           Fixed crash that occurred when an empty buffer sequence was passed to a
2107           composed read or write operation.
2108         </li>
2109 <li class="listitem">
2110           Added missing <code class="computeroutput">operator+</code> overload in <code class="computeroutput">buffers_iterator</code>
2111           (<a href="https://svn.boost.org/trac/boost/ticket/4382" target="_top">#4382</a>).
2112         </li>
2113 <li class="listitem">
2114           Implemented cancellation of <code class="computeroutput">null_buffers</code> operations on Windows.
2115         </li>
2116 </ul></div>
2117 <h4>
2118 <a name="boost_asio.history.h27"></a>
2119       <span class="phrase"><a name="boost_asio.history.asio_1_4_5___boost_1_43"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_5___boost_1_43">Asio
2120       1.4.5 / Boost 1.43</a>
2121     </h4>
2122 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2123 <li class="listitem">
2124           Improved performance.
2125         </li>
2126 <li class="listitem">
2127           Reduced compile times.
2128         </li>
2129 <li class="listitem">
2130           Reduced the size of generated code.
2131         </li>
2132 <li class="listitem">
2133           Extended the guarantee that background threads don't call user code to
2134           all asynchronous operations (<a href="https://svn.boost.org/trac/boost/ticket/3923" target="_top">#3923</a>).
2135         </li>
2136 <li class="listitem">
2137           Changed to use edge-triggered epoll on Linux.
2138         </li>
2139 <li class="listitem">
2140           Changed to use <code class="computeroutput">timerfd</code> for dispatching timers on Linux, when
2141           available.
2142         </li>
2143 <li class="listitem">
2144           Changed to use one-shot notifications with kqueue on Mac OS X and BSD platforms.
2145         </li>
2146 <li class="listitem">
2147           Added a bitmask type <code class="computeroutput">ip::resolver_query_base::flags</code> as per
2148           the TR2 proposal. This type prevents implicit conversion from <code class="computeroutput">int</code>
2149           to <code class="computeroutput">flags</code>, allowing the compiler to catch cases where users
2150           incorrectly pass a numeric port number as the service name.
2151         </li>
2152 <li class="listitem">
2153           Added <code class="computeroutput">#define NOMINMAX</code> for all Windows compilers. Users can
2154           define <code class="computeroutput">BOOST_ASIO_NO_NOMINMAX</code> to suppress this definition
2155           (<a href="https://svn.boost.org/trac/boost/ticket/3901" target="_top">#3901</a>).
2156         </li>
2157 <li class="listitem">
2158           Fixed a bug where 0-byte asynchronous reads were incorrectly passing an
2159           <code class="computeroutput">error::eof</code> result to the completion handler (<a href="https://svn.boost.org/trac/boost/ticket/4023" target="_top">#4023</a>).
2160         </li>
2161 <li class="listitem">
2162           Changed the <code class="computeroutput">io_control()</code> member functions to always call
2163           <code class="computeroutput">ioctl</code> on the underlying descriptor when modifying blocking
2164           mode (<a href="https://svn.boost.org/trac/boost/ticket/3307" target="_top">#3307</a>).
2165         </li>
2166 <li class="listitem">
2167           Changed the resolver implementation to longer require the typedefs <code class="computeroutput">InternetProtocol::resolver_query</code>
2168           and <code class="computeroutput">InternetProtocol::resolver_iterator</code>, as neither typedef
2169           is part of the documented <code class="computeroutput">InternetProtocol</code> requirements. The
2170           corresponding typedefs in the <code class="computeroutput">ip::tcp</code>, <code class="computeroutput">ip::udp</code>
2171           and <code class="computeroutput">ip::icmp</code> classes have been deprecated.
2172         </li>
2173 <li class="listitem">
2174           Fixed out-of-band handling for reactors not based on <code class="computeroutput">select()</code>.
2175         </li>
2176 <li class="listitem">
2177           Added new <code class="computeroutput">BOOST_ASIO_DISABLE_THREADS</code> macro that allows Asio's
2178           threading support to be independently disabled.
2179         </li>
2180 <li class="listitem">
2181           Minor documentation improvements.
2182         </li>
2183 </ul></div>
2184 <h4>
2185 <a name="boost_asio.history.h28"></a>
2186       <span class="phrase"><a name="boost_asio.history.asio_1_4_4___boost_1_42"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_4___boost_1_42">Asio
2187       1.4.4 / Boost 1.42</a>
2188     </h4>
2189 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2190 <li class="listitem">
2191           Added a new HTTP Server 4 example illustrating the use of stackless coroutines
2192           with Asio.
2193         </li>
2194 <li class="listitem">
2195           Changed handler allocation and invocation to use <code class="computeroutput">boost::addressof</code>
2196           to get the address of handler objects, rather than applying <code class="computeroutput">operator&amp;</code>
2197           directly (<a href="https://svn.boost.org/trac/boost/ticket/2977" target="_top">#2977</a>).
2198         </li>
2199 <li class="listitem">
2200           Restricted MSVC buffer debugging workaround to 2008, as it causes a crash
2201           with 2010 beta 2 (<a href="https://svn.boost.org/trac/boost/ticket/3796" target="_top">#3796</a>,
2202           <a href="https://svn.boost.org/trac/boost/ticket/3822" target="_top">#3822</a>).
2203         </li>
2204 <li class="listitem">
2205           Fixed a problem with the lifetime of handler memory, where Windows needs
2206           the <code class="computeroutput">OVERLAPPED</code> structure to be valid until both the initiating
2207           function call has returned and the completion packet has been delivered.
2208         </li>
2209 <li class="listitem">
2210           Don't block signals while performing system calls, but instead restart
2211           the calls if they are interrupted.
2212         </li>
2213 <li class="listitem">
2214           Documented the guarantee made by strand objects with respect to order of
2215           handler invocation.
2216         </li>
2217 <li class="listitem">
2218           Changed strands to use a pool of implementations, to make copying of strands
2219           cheaper.
2220         </li>
2221 <li class="listitem">
2222           Ensured that kqueue support is enabled for BSD platforms (<a href="https://svn.boost.org/trac/boost/ticket/3626" target="_top">#3626</a>).
2223         </li>
2224 <li class="listitem">
2225           Added a <code class="computeroutput">boost_</code> prefix to the <code class="computeroutput">extern "C"</code>
2226           thread entry point function (<a href="https://svn.boost.org/trac/boost/ticket/3809" target="_top">#3809</a>).
2227         </li>
2228 <li class="listitem">
2229           In <code class="computeroutput">getaddrinfo</code> emulation, only check the socket type (<code class="computeroutput">SOCK_STREAM</code>
2230           or <code class="computeroutput">SOCK_DGRAM</code>) if a service name has been specified. This
2231           should allow the emulation to work with raw sockets.
2232         </li>
2233 <li class="listitem">
2234           Added a workaround for some broken Windows firewalls that make a socket
2235           appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.
2236         </li>
2237 <li class="listitem">
2238           Applied a fix for reported excessive CPU usage under Solaris (<a href="https://svn.boost.org/trac/boost/ticket/3670" target="_top">#3670</a>).
2239         </li>
2240 <li class="listitem">
2241           Added some support for platforms that use older compilers such as g++ 2.95
2242           (<a href="https://svn.boost.org/trac/boost/ticket/3743" target="_top">#3743</a>).
2243         </li>
2244 </ul></div>
2245 <h4>
2246 <a name="boost_asio.history.h29"></a>
2247       <span class="phrase"><a name="boost_asio.history.asio_1_4_3___boost_1_40"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_3___boost_1_40">Asio
2248       1.4.3 / Boost 1.40</a>
2249     </h4>
2250 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2251 <li class="listitem">
2252           Added a new ping example to illustrate the use of ICMP sockets.
2253         </li>
2254 <li class="listitem">
2255           Changed the <code class="computeroutput">buffered*_stream&lt;&gt;</code> templates to treat 0-byte
2256           reads and writes as no-ops, to comply with the documented type requirements
2257           for <code class="computeroutput">SyncReadStream</code>, <code class="computeroutput">AsyncReadStream</code>, <code class="computeroutput">SyncWriteStream</code>
2258           and <code class="computeroutput">AsyncWriteStream</code>.
2259         </li>
2260 <li class="listitem">
2261           Changed some instances of the <code class="computeroutput">throw</code> keyword to <code class="computeroutput">boost::throw_exception()</code>
2262           to allow Asio to be used when exception support is disabled. Note that
2263           the SSL wrappers still require exception support (<a href="https://svn.boost.org/trac/boost/ticket/2754" target="_top">#2754</a>).
2264         </li>
2265 <li class="listitem">
2266           Made Asio compatible with the OpenSSL 1.0 beta (<a href="https://svn.boost.org/trac/boost/ticket/3256" target="_top">#3256</a>).
2267         </li>
2268 <li class="listitem">
2269           Eliminated a redundant system call in the Solaris <code class="literal">/dev/poll</code>
2270           backend.
2271         </li>
2272 <li class="listitem">
2273           Fixed a bug in resizing of the bucket array in the internal hash maps (<a href="https://svn.boost.org/trac/boost/ticket/3095" target="_top">#3095</a>).
2274         </li>
2275 <li class="listitem">
2276           Ensured correct propagation of the error code when a synchronous accept
2277           fails (<a href="https://svn.boost.org/trac/boost/ticket/3216" target="_top">#3216</a>).
2278         </li>
2279 <li class="listitem">
2280           Ensured correct propagation of the error code when a synchronous read or
2281           write on a Windows HANDLE fails.
2282         </li>
2283 <li class="listitem">
2284           Fixed failures reported when <code class="computeroutput">_GLIBCXX_DEBUG</code> is defined (<a href="https://svn.boost.org/trac/boost/ticket/3098" target="_top">#3098</a>).
2285         </li>
2286 <li class="listitem">
2287           Fixed custom memory allocation support for timers (<a href="https://svn.boost.org/trac/boost/ticket/3107" target="_top">#3107</a>).
2288         </li>
2289 <li class="listitem">
2290           Tidied up various warnings reported by g++ (<a href="https://svn.boost.org/trac/boost/ticket/1341" target="_top">#1341</a>,
2291           <a href="https://svn.boost.org/trac/boost/ticket/2618" target="_top">#2618</a>).
2292         </li>
2293 <li class="listitem">
2294           Various documentation improvements, including more obvious hyperlinks to
2295           function overloads, header file information, examples for the handler type
2296           requirements, and adding enum values to the index (<a href="https://svn.boost.org/trac/boost/ticket/3157" target="_top">#3157</a>,
2297           <a href="https://svn.boost.org/trac/boost/ticket/2620" target="_top">#2620</a>).
2298         </li>
2299 </ul></div>
2300 <h4>
2301 <a name="boost_asio.history.h30"></a>
2302       <span class="phrase"><a name="boost_asio.history.asio_1_4_2___boost_1_39"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_2___boost_1_39">Asio
2303       1.4.2 / Boost 1.39</a>
2304     </h4>
2305 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2306 <li class="listitem">
2307           Implement automatic resizing of the bucket array in the internal hash maps.
2308           This is to improve performance for very large numbers of asynchronous operations
2309           and also to reduce memory usage for very small numbers. A new macro <code class="computeroutput">BOOST_ASIO_HASH_MAP_BUCKETS</code>
2310           may be used to tweak the sizes used for the bucket arrays. (N.B. this feature
2311           introduced a bug which was fixed in Asio 1.4.3 / Boost 1.40.)
2312         </li>
2313 <li class="listitem">
2314           Add performance optimisation for the Windows IOCP backend for when no timers
2315           are used.
2316         </li>
2317 <li class="listitem">
2318           Prevent locale settings from affecting formatting of TCP and UDP endpoints
2319           (<a href="https://svn.boost.org/trac/boost/ticket/2682" target="_top">#2682</a>).
2320         </li>
2321 <li class="listitem">
2322           Fix a memory leak that occurred when an asynchronous SSL operation's completion
2323           handler threw an exception (<a href="https://svn.boost.org/trac/boost/ticket/2910" target="_top">#2910</a>).
2324         </li>
2325 <li class="listitem">
2326           Fix the implementation of <code class="computeroutput">io_control()</code> so that it adheres
2327           to the documented type requirements for IoControlCommand (<a href="https://svn.boost.org/trac/boost/ticket/2820" target="_top">#2820</a>).
2328         </li>
2329 <li class="listitem">
2330           Fix incompatibility between Asio and ncurses.h (<a href="https://svn.boost.org/trac/boost/ticket/2156" target="_top">#2156</a>).
2331         </li>
2332 <li class="listitem">
2333           On Windows, specifically handle the case when an overlapped <code class="computeroutput">ReadFile</code>
2334           call fails with <code class="computeroutput">ERROR_MORE_DATA</code>. This enables a hack where
2335           a <code class="computeroutput">windows::stream_handle</code> can be used with a message-oriented
2336           named pipe (<a href="https://svn.boost.org/trac/boost/ticket/2936" target="_top">#2936</a>).
2337         </li>
2338 <li class="listitem">
2339           Fix system call wrappers to always clear the error on success, as POSIX
2340           allows successful system calls to modify errno (<a href="https://svn.boost.org/trac/boost/ticket/2953" target="_top">#2953</a>).
2341         </li>
2342 <li class="listitem">
2343           Don't include termios.h if <code class="computeroutput">BOOST_ASIO_DISABLE_SERIAL_PORT</code>
2344           is defined (<a href="https://svn.boost.org/trac/boost/ticket/2917" target="_top">#2917</a>).
2345         </li>
2346 <li class="listitem">
2347           Cleaned up some more MSVC level 4 warnings (<a href="https://svn.boost.org/trac/boost/ticket/2828" target="_top">#2828</a>).
2348         </li>
2349 <li class="listitem">
2350           Various documentation fixes (<a href="https://svn.boost.org/trac/boost/ticket/2871" target="_top">#2871</a>).
2351         </li>
2352 </ul></div>
2353 <h4>
2354 <a name="boost_asio.history.h31"></a>
2355       <span class="phrase"><a name="boost_asio.history.asio_1_4_1___boost_1_38"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_1___boost_1_38">Asio
2356       1.4.1 / Boost 1.38</a>
2357     </h4>
2358 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2359 <li class="listitem">
2360           Improved compatibility with some Windows firewall software.
2361         </li>
2362 <li class="listitem">
2363           Ensured arguments to <code class="computeroutput">windows::overlapped_ptr::complete()</code> are
2364           correctly passed to the completion handler (<a href="https://svn.boost.org/trac/boost/ticket/2614" target="_top">#2614</a>).
2365         </li>
2366 <li class="listitem">
2367           Fixed a link problem and multicast failure on QNX (<a href="https://svn.boost.org/trac/boost/ticket/2504" target="_top">#2504</a>,
2368           <a href="https://svn.boost.org/trac/boost/ticket/2530" target="_top">#2530</a>).
2369         </li>
2370 <li class="listitem">
2371           Fixed a compile error in SSL support on MinGW / g++ 3.4.5.
2372         </li>
2373 <li class="listitem">
2374           Drop back to using a pipe for notification if eventfd is not available
2375           at runtime on Linux (<a href="https://svn.boost.org/trac/boost/ticket/2683" target="_top">#2683</a>).
2376         </li>
2377 <li class="listitem">
2378           Various minor bug and documentation fixes (<a href="https://svn.boost.org/trac/boost/ticket/2534" target="_top">#2534</a>,
2379           <a href="https://svn.boost.org/trac/boost/ticket/2541" target="_top">#2541</a>,
2380           <a href="https://svn.boost.org/trac/boost/ticket/2607" target="_top">#2607</a>,
2381           <a href="https://svn.boost.org/trac/boost/ticket/2617" target="_top">#2617</a>,
2382           <a href="https://svn.boost.org/trac/boost/ticket/2619" target="_top">#2619</a>).
2383         </li>
2384 </ul></div>
2385 <h4>
2386 <a name="boost_asio.history.h32"></a>
2387       <span class="phrase"><a name="boost_asio.history.asio_1_4_0___boost_1_37"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_4_0___boost_1_37">Asio
2388       1.4.0 / Boost 1.37</a>
2389     </h4>
2390 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2391 <li class="listitem">
2392           Enhanced CompletionCondition concept with the signature <code class="computeroutput">size_t CompletionCondition(error_code
2393           ec, size_t total)</code>, where the return value indicates the maximum
2394           number of bytes to be transferred on the next read or write operation.
2395           (The old CompletionCondition signature is still supported for backwards
2396           compatibility).
2397         </li>
2398 <li class="listitem">
2399           New windows::overlapped_ptr class to allow arbitrary overlapped I/O functions
2400           (such as TransmitFile) to be used with Asio.
2401         </li>
2402 <li class="listitem">
2403           On recent versions of Linux, an eventfd descriptor is now used (rather
2404           than a pipe) to interrupt a blocked select/epoll reactor.
2405         </li>
2406 <li class="listitem">
2407           Added const overloads of lowest_layer().
2408         </li>
2409 <li class="listitem">
2410           Synchronous read, write, accept and connect operations are now thread safe
2411           (meaning that it is now permitted to perform concurrent synchronous operations
2412           on an individual socket, if supported by the OS).
2413         </li>
2414 <li class="listitem">
2415           Reactor-based io_service implementations now use lazy initialisation to
2416           reduce the memory usage of an io_service object used only as a message
2417           queue.
2418         </li>
2419 </ul></div>
2420 <h4>
2421 <a name="boost_asio.history.h33"></a>
2422       <span class="phrase"><a name="boost_asio.history.asio_1_2_0___boost_1_36"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_2_0___boost_1_36">Asio
2423       1.2.0 / Boost 1.36</a>
2424     </h4>
2425 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
2426 <li class="listitem">
2427           Added support for serial ports.
2428         </li>
2429 <li class="listitem">
2430           Added support for UNIX domain sockets.
2431         </li>
2432 <li class="listitem">
2433           Added support for raw sockets and ICMP.
2434         </li>
2435 <li class="listitem">
2436           Added wrappers for POSIX stream-oriented file descriptors (excluding regular
2437           files).
2438         </li>
2439 <li class="listitem">
2440           Added wrappers for Windows stream-oriented <code class="computeroutput">HANDLE</code>s such as
2441           named pipes (requires <code class="computeroutput">HANDLE</code>s that work with I/O completion
2442           ports).
2443         </li>
2444 <li class="listitem">
2445           Added wrappers for Windows random-access <code class="computeroutput">HANDLE</code>s such as files
2446           (requires <code class="computeroutput">HANDLE</code>s that work with I/O completion ports).
2447         </li>
2448 <li class="listitem">
2449           Added support for reactor-style operations (i.e. they report readiness
2450           but perform no I/O) using a new <code class="computeroutput">null_buffers</code> type.
2451         </li>
2452 <li class="listitem">
2453           Added an iterator type for bytewise traversal of buffer sequences.
2454         </li>
2455 <li class="listitem">
2456           Added new <code class="computeroutput">read_until()</code> and <code class="computeroutput">async_read_until()</code>
2457           overloads that take a user-defined function object for locating message
2458           boundaries.
2459         </li>
2460 <li class="listitem">
2461           Added an experimental two-lock queue (enabled by defining <code class="computeroutput">BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE</code>)
2462           that may provide better <code class="computeroutput">io_service</code> scalability across many
2463           processors.
2464         </li>
2465 <li class="listitem">
2466           Various fixes, performance improvements, and more complete coverage of
2467           the custom memory allocation support.
2468         </li>
2469 </ul></div>
2470 <h4>
2471 <a name="boost_asio.history.h34"></a>
2472       <span class="phrase"><a name="boost_asio.history.asio_1_0_0___boost_1_35"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_0_0___boost_1_35">Asio
2473       1.0.0 / Boost 1.35</a>
2474     </h4>
2475 <p>
2476       First release of Asio as part of Boost.
2477     </p>
2478 </div>
2479 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
2480 <td align="left"></td>
2481 <td align="right"><div class="copyright-footer">Copyright &#169; 2003-2019 Christopher M. Kohlhoff<p>
2482         Distributed under the Boost Software License, Version 1.0. (See accompanying
2483         file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
2484       </p>
2485 </div></td>
2486 </tr></table>
2487 <hr>
2488 <div class="spirit-nav">
2489 <a accesskey="p" href="net_ts.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost_asio.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../boost_asio.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="index.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
2490 </div>
2491 </body>
2492 </html>