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