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