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