3009 lines
165 KiB
HTML
3009 lines
165 KiB
HTML
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<title>Revision History</title>
|
||
<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
|
||
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
|
||
<link rel="home" href="../boost_asio.html" title="Boost.Asio">
|
||
<link rel="up" href="../boost_asio.html" title="Boost.Asio">
|
||
<link rel="prev" href="std_executors.html" title="Proposed Standard Executors">
|
||
<link rel="next" href="index.html" title="">
|
||
</head>
|
||
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
||
<table cellpadding="2" width="100%"><tr>
|
||
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
|
||
<td align="center"><a href="../../../index.html">Home</a></td>
|
||
<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
|
||
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
|
||
<td align="center"><a href="../../../more/index.htm">More</a></td>
|
||
</tr></table>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<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>
|
||
</div>
|
||
<div class="section">
|
||
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
|
||
<a name="boost_asio.history"></a><a class="link" href="history.html" title="Revision History">Revision History</a>
|
||
</h2></div></div></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h0"></a>
|
||
<span class="phrase"><a name="boost_asio.history.asio_1_18_2___boost_1_76"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_18_2___boost_1_76">Asio
|
||
1.18.2 / Boost 1.76</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">ip::scope_id_type</code> type alias.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">ip::port_type</code> type alias.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">std::hash</code> specialisations for IP addresses.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">std::hash</code> specialisations for <code class="computeroutput">ip::basic_endpoint<></code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Refactored SFINAE usage to improve compile times.
|
||
</li>
|
||
<li class="listitem">
|
||
Added friendship support to customisation points, and made most customisations
|
||
private.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">any_io_executor</code> to a "strong typedef"-style
|
||
class.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">experimental::as_single</code> to work with handler hook deprecation.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured pthread condition variable attributes are cleaned up on all platforms.
|
||
</li>
|
||
<li class="listitem">
|
||
Clarified thread safety notes on sockets and descriptors.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured <code class="computeroutput">errno</code> is not overwritten if <code class="computeroutput">socket()</code>
|
||
fails on macOS/FreeBSD.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed work tracking for <code class="computeroutput">io_context</code> and <code class="computeroutput">thread_pool</code>
|
||
executors when move-assigned.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured internal <code class="computeroutput">call_stack</code> objects are accessed only from
|
||
implementation files.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed I/O object move-assignment to ensure the executor is left in a valid
|
||
state.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed detection of compiler support for defaulted template argument on
|
||
functions with MSVC.
|
||
</li>
|
||
<li class="listitem">
|
||
Prevented the <code class="computeroutput">blocking.always</code> property from being used with
|
||
<code class="computeroutput">strand<></code>, as it did not produce the correct semantics.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed deprecated file <code class="literal">asio/impl/src.cpp</code>.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h1"></a>
|
||
<span class="phrase"><a name="boost_asio.history.asio_1_18_1___boost_1_75"></a></span><a class="link" href="history.html#boost_asio.history.asio_1_18_1___boost_1_75">Asio
|
||
1.18.1 / Boost 1.75</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Enabled support for UNIX domain sockets on Windows. From Windows 10, UNIX
|
||
domain sockets (a.k.a "local" sockets) are supported on Windows,
|
||
with the exception of the <code class="computeroutput">connect_pair</code> function (which will
|
||
fail with an operation_not_supported error).
|
||
</li>
|
||
<li class="listitem">
|
||
Added executor-converting construction and assignment to <code class="computeroutput">ip::basic_resolver</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added compatibility between polymorphic executors and the (deprecated)
|
||
handler invocation hook.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">experimental::as_single</code> completion token adapter.
|
||
The <code class="computeroutput">as_single</code> completion token adapter can be used to specify
|
||
that the completion handler arguments should be combined into a single
|
||
argument. For completion signatures with a single parameter, the argument
|
||
is passed through as-is. For signatures with two or more parameters, the
|
||
arguments are combined into a tuple. The <code class="computeroutput">as_single</code> adapter
|
||
may be used in conjunction with <code class="computeroutput">use_awaitable</code> and structured
|
||
bindings as follows:<br>
|
||
<pre class="programlisting">auto [e, n] = co_await socket.async_read_some(
|
||
boost::asio::buffer(data), as_single(use_awaitable));
|
||
</pre>
|
||
<br> Alternatively, it may be used as a default completion token like
|
||
so:<br>
|
||
<pre class="programlisting">using default_token = as_single_t<use_awaitable_t<>>;
|
||
using tcp_socket = default_token::as_default_on_t<tcp::socket>;
|
||
// ...
|
||
awaitable<void> do_read(tcp_socket socket)
|
||
{
|
||
// ...
|
||
auto [e, n] = co_await socket.async_read_some(boost::asio::buffer(data));
|
||
// ...
|
||
}
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for <code class="computeroutput">MSG_NOSIGNAL</code> on more platforms by using
|
||
<code class="computeroutput">_POSIX_VERSION</code> to detect whether it is supported.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the ability to compile using libpthread on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Added workarounds for the Intel C++ compiler.
|
||
</li>
|
||
<li class="listitem">
|
||
Added more support for detecting and optimising for handlers that have
|
||
no custom executor.
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced lock contention for timer cancellation on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Reinstated a previously removed null-pointer check, as it had a measurable
|
||
impact on performance.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">executor</code> concept to test for a const-qualified
|
||
<code class="computeroutput">execute()</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">any_executor</code> support for builds without RTTI support.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">thread_pool</code> unit test to work without RTTI support.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed C++20 coroutines compatibility with clang on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some compatibility issues with Windows Runtime.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed shadow name warnings caused by addition of <code class="computeroutput">asio::query</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a "logical ‘or’ of equal expressions" warning on linux.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a benign switch fallthrough warning.
|
||
</li>
|
||
<li class="listitem">
|
||
Added missing <code class="computeroutput">push/pop_options.hpp</code> includes.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed zero-as-null-pointer-constant warnings.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a comma-operator warning.
|
||
</li>
|
||
<li class="listitem">
|
||
Updated the documentation to clarify when the <code class="literal">select</code>
|
||
reactor is used on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed potential ambiguity caused by <code class="computeroutput">any_executor</code> comparisons
|
||
and conversion.
|
||
</li>
|
||
<li class="listitem">
|
||
Added detection of non-experimental C++20 coroutines on MSVC 19.8.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compatibility with uClibc.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">strand<></code> adaptation of Networking TS executors
|
||
when targeting older C++ versions or less conformant compilers.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h2"></a>
|
||
<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
|
||
1.18.0 / Boost 1.74</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added an implementation of the proposed standard executors (<a href="http://wg21.link/P0443r13" target="_top">P0443r13</a>,
|
||
<a href="http://wg21.link/P1348r0" target="_top">P1348r0</a>, and <a href="http://wg21.link/P1393r0" target="_top">P1393r0</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for the proposed standard executors to Asio's I/O facilities:
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
The <code class="computeroutput">io_context::executor_type</code>, <code class="computeroutput">thread_pool::executor_type</code>,
|
||
<code class="computeroutput">system_executor</code>, and <code class="computeroutput">strand</code> executors now
|
||
meet the requirements for the proposed standard executors. These
|
||
classes also continue to meet the existing requirements for the Networking
|
||
TS model of executors.
|
||
</li>
|
||
<li class="listitem">
|
||
All I/O objects, asynchronous operations, and utilities including
|
||
<code class="computeroutput">dispatch</code>, <code class="computeroutput">post</code>, <code class="computeroutput">defer</code>, <code class="computeroutput">get_associated_executor</code>,
|
||
<code class="computeroutput">bind_executor</code>, <code class="computeroutput">make_work_guard</code>, <code class="computeroutput">spawn</code>,
|
||
<code class="computeroutput">co_spawn</code>, <code class="computeroutput">async_compose</code>, <code class="computeroutput">use_future</code>,
|
||
etc., can interoperate with both new proposed standard executors,
|
||
and with existing Networking TS executors. The implementation determines
|
||
at compile time which model a particular executor meets; the proposed
|
||
standard executor model is used in preference if both are detected.
|
||
</li>
|
||
<li class="listitem">
|
||
The <code class="computeroutput">any_io_executor</code> type alias has been introduced as
|
||
the new default runtime-polymorphic executor for all I/O objects.
|
||
This type alias points to the <code class="computeroutput">execution::any_executor<></code>
|
||
template with a set of supportable properties specified for use with
|
||
I/O. This change may break existing code that directly uses the old
|
||
polymorphic wrapper, <code class="computeroutput">executor</code>. If required for backward
|
||
compatibility, <code class="computeroutput">BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT</code>
|
||
can be defined, which changes the <code class="computeroutput">any_io_executor</code> type
|
||
alias to instead point to the <code class="computeroutput">executor</code> polymorphic wrapper.
|
||
</li>
|
||
<li class="listitem">
|
||
Support for the existing Networking TS model of executors can be
|
||
disabled by defining <code class="computeroutput">BOOST_ASIO_NO_TS_EXECUTORS</code>.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added converting move construction and assignment to <code class="computeroutput">basic_waitable_timer</code>.
|
||
This enables move construction and assignment between different timer types,
|
||
provided the executor types are convertible. For example:<br>
|
||
<pre class="programlisting">basic_waitable_timer<
|
||
clock_type,
|
||
traits_type,
|
||
io_context::executor_type
|
||
> timer1(my_io_context);
|
||
|
||
basic_waitable_timer<
|
||
clock_type,
|
||
traits_type,
|
||
any_io_executor // polymorphic wrapper
|
||
> timer2(std::move(timer1));
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled C++20 coroutine support when using <code class="literal">gcc</code> 10.
|
||
</li>
|
||
<li class="listitem">
|
||
Added overloads of <code class="computeroutput">co_spawn</code> that launch an awaitable. This
|
||
change allows us to write:<br>
|
||
<pre class="programlisting">co_spawn(executor,
|
||
echo(std::move(socket)),
|
||
detached);
|
||
</pre>
|
||
<br> instead of:<br>
|
||
<pre class="programlisting">co_spawn(executor,
|
||
[socket = std::move(socket)]() mutable
|
||
{
|
||
return echo(std::move(socket));
|
||
},
|
||
detached);
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new constructor overload to <code class="computeroutput">use_awaitable_t</code>'s default
|
||
executor adapter, to enable conversion between executor types.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for using <code class="computeroutput">detached_t</code> as a default completion
|
||
token, by adding members <code class="computeroutput">as_default_on()</code> and <code class="computeroutput">as_default_on_t<></code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a move constructor to <code class="computeroutput">ssl::stream<></code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">ssl::stream<></code> write operations to linearise
|
||
gather-write buffer sequences.
|
||
</li>
|
||
<li class="listitem">
|
||
Added compile-time detection of the deprecated <code class="computeroutput">asio_handler_invoke</code>
|
||
hook. This hook was deprecated with the introduction of the Networking
|
||
TS trait <code class="computeroutput">associated_executor</code> and function <code class="computeroutput">get_associated_executor()</code>.
|
||
Compiling an application with <code class="computeroutput">BOOST_ASIO_NO_DEPRECATED</code> will
|
||
now trigger a compile error if any handler implements the <code class="computeroutput">asio_handler_invoke</code>
|
||
hook.
|
||
</li>
|
||
<li class="listitem">
|
||
Added compile-time detection of the deprecated <code class="computeroutput">asio_handler_allocate</code>
|
||
and <code class="computeroutput">asio_handle_deallocate</code> hooks. These hooks were deprecated
|
||
with the introduction of the Networking TS trait <code class="computeroutput">associated_allocator</code>
|
||
and function <code class="computeroutput">get_associated_allocator()</code>. Compiling an application
|
||
with <code class="computeroutput">BOOST_ASIO_NO_DEPRECATED</code> will now trigger a compile error
|
||
if any handler implements the <code class="computeroutput">asio_handler_allocate</code> or <code class="computeroutput">asio_handler_deallocate</code>
|
||
hooks.
|
||
</li>
|
||
<li class="listitem">
|
||
Implemented a number of performance optimisations, including:
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Specialising single-buffer operations to use <code class="computeroutput">recv</code> rather
|
||
than <code class="computeroutput">recvmsg</code>, <code class="computeroutput">send</code> rather than <code class="computeroutput">sendmsg</code>,
|
||
<code class="computeroutput">read</code> rather than <code class="computeroutput">readv</code>, and <code class="computeroutput">write</code>
|
||
rather than <code class="computeroutput">writev</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Lightening the reference counting overhead of the polymorphic wrapper
|
||
<code class="computeroutput">executor</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Returning from system call operation wrappers as early as possible,
|
||
and only accessing <code class="computeroutput">errno</code> and error codes when on an
|
||
error path.
|
||
</li>
|
||
<li class="listitem">
|
||
Applying additional optimisations if a "native" I/O executor
|
||
(such as <code class="computeroutput">io_context::exeutor_type</code>) is detected.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added source location support to handler tracking. The new <code class="computeroutput">BOOST_ASIO_HANDLER_LOCATION((file_name,
|
||
line, function_name))</code> macro may be used to inform the handler tracking
|
||
mechanism of a source location. This macro declares an object that is placed
|
||
on the stack. Then, when an asynchronous operation is launched with location
|
||
information, it outputs lines using the <span class="bold"><strong><action></strong></span>
|
||
<code class="literal">n^m</code>, prior to the <code class="literal">n*m</code> line that signifies
|
||
the beginning of the asynchronous operation. For example:
|
||
<pre class="programlisting">@asio|1589423304.861944|>7|ec=system:0,bytes_transferred=5
|
||
@asio|1589423304.861952|7^8|in 'async_write' (./../../../include/asio/impl/write.hpp:330)
|
||
@asio|1589423304.861952|7^8|called from 'do_write' (handler_tracking/async_tcp_echo_server.cpp:62)
|
||
@asio|1589423304.861952|7^8|called from 'operator()' (handler_tracking/async_tcp_echo_server.cpp:51)
|
||
@asio|1589423304.861952|7*8|socket@0x7ff61c008230.async_send
|
||
@asio|1589423304.861975|.8|non_blocking_send,ec=system:0,bytes_transferred=5
|
||
@asio|1589423304.861980|<7|
|
||
</pre>
|
||
<br> If <code class="computeroutput">std::source_location</code> or <code class="computeroutput">std::experimental::source_location</code>
|
||
are available, the <code class="computeroutput">use_awaitable_t</code> token (when default-constructed
|
||
or used as a default completion token) will also cause handler tracking
|
||
to output a source location for each newly created asynchronous operation.
|
||
A <code class="computeroutput">use_awaitable_t</code> object may also be explicitly constructed
|
||
with location information.
|
||
</li>
|
||
<li class="listitem">
|
||
Implemented various improvements to the <code class="literal">handlerviz.pl</code>
|
||
tool.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Add nodes for pending handlers at bottom of graph, outlined in red.
|
||
</li>
|
||
<li class="listitem">
|
||
Display source location in a tooltip on the edge label (for SVG).
|
||
</li>
|
||
<li class="listitem">
|
||
Use invisible nodes to enforce order to keep related control flow
|
||
vertical.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="literal">handlerlive.pl</code> tool, which processes handler
|
||
tracking output to produce a list of "live" handlers. Live handlers
|
||
are those that are associated with pending asynchronous operations, as
|
||
well as handlers that are currently executing. For example:
|
||
<pre class="programlisting">cat output.txt | perl handlerlive.pl
|
||
</pre>
|
||
or:
|
||
<pre class="programlisting">perl handerlive.pl < output.txt
|
||
</pre>
|
||
or:
|
||
<pre class="programlisting">perl handlerlive.pl output.txt
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="literal">handlertree.pl</code> tool, which filters handler
|
||
tracking output to include only those events in the tree that produced
|
||
the nominated handlers. For example, to filter the output to include only
|
||
the events associated with handlers <code class="computeroutput">123</code>, <code class="computeroutput">456</code>,
|
||
and their predecessors:
|
||
<pre class="programlisting">cat output.txt | perl handlertree.pl 123 456
|
||
</pre>
|
||
or:
|
||
<pre class="programlisting">perl handlertree.pl 123 456 < output.txt
|
||
</pre>
|
||
<br> This script may be combined with handerlive.pl and handlerviz.pl
|
||
to produce a graph of the "live" asynchronous operation chains.
|
||
For example:
|
||
<pre class="programlisting">cat output.txt | \
|
||
perl handlertree.pl `perl handlerlive.pl output.txt` | \
|
||
perl handlerviz.pl | \
|
||
dot -Tsvg > output.svg
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Added changes for clang-based Embarcadero C++ compilers.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a deadlock that can occur when multiple threads concurrently initialise
|
||
the Windows I/O completion port backend.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">async_compose</code> to work with copyable handlers when passed
|
||
by lvalue.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed completion signature deduction in <code class="computeroutput">co_spawn</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed a spurious <code class="computeroutput">Executor</code> base class from the <code class="computeroutput">executor_binder</code>
|
||
implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Various fixes and improvements in the documentation and examples.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h3"></a>
|
||
<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
|
||
1.16.1 / Boost 1.73</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed compatibility with C++20 concept syntax.
|
||
</li>
|
||
<li class="listitem">
|
||
Marked the POSIX descriptor classes' move constructors as <code class="computeroutput">noexcept</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">ssl::host_name_verification</code> class, which is a drop-in
|
||
replacement for <code class="computeroutput">ssl::rfc2818_verification</code>. The <code class="computeroutput">ssl::rfc2818_verification</code>
|
||
class has been marked as deprecated. As a consequence of this change, SSL
|
||
support now depends on functions that were introduced in OpenSSL 1.0.2.
|
||
</li>
|
||
<li class="listitem">
|
||
Added an <code class="computeroutput">ssl::context</code> constructor to take ownership of a native
|
||
handle.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed C++ language version detection with <code class="literal">gcc</code> to use
|
||
<code class="computeroutput">__cplusplus</code> macro.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a work counting issue in the asynchronous resolve operation for endpoints.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">strand<></code> converting constructors and assignment
|
||
operators.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that resolvers are restarted correctly after a fork.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compatibility with the current NetBSD release.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed spurious handler requirement checks in some <code class="computeroutput">async_read</code>
|
||
overloads.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">ssl::context</code> class to propagate non-EOF errors
|
||
from the <code class="computeroutput">add_certificate_authority</code> function.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific <code class="computeroutput">thread_pool</code> destructor hang that
|
||
occurred when the pool had an associated I/O object.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="literal">select</code> reactor to recreate the "self
|
||
pipe trick" sockets on error. This addresses an issue on some versions
|
||
of Windows, where these sockets are discconected after a system sleep.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error in the buffered streams due to the lack of reference
|
||
collapsing in C++98.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">priority_scheduler</code> example to demonstrate calls
|
||
to <code class="computeroutput">shutdown()</code> and <code class="computeroutput">destroy()</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed some unnecessary null pointer checks.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed Windows platform detection to recognise TV titles as Windows apps.
|
||
</li>
|
||
<li class="listitem">
|
||
Added some emscripten compatibility patches.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error in the <code class="computeroutput">use_awaitable_t::as_default_on</code>
|
||
function.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed all uses of the boost.bind placeholders to use the <code class="computeroutput">boost::placeholders</code>
|
||
namespace.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a potential compile error in the <code class="computeroutput">async_compose</code> implementation
|
||
due to incorrect overload selection.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed some non-virtual destructor warnings.
|
||
</li>
|
||
<li class="listitem">
|
||
Various documentation fixes and improvements.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h4"></a>
|
||
<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
|
||
1.16.0 / Boost 1.72</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">async_initiate</code> helper function to automatically
|
||
deduce its return type. This is enabled for C++11 or later.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed all asynchronous operations to use automatically deduced return
|
||
types. This allows completion token implementations to incorporate the
|
||
asynchronous operation initiation into the initiating function's return
|
||
type, without type erasure. Note that C++14 or later is required to support
|
||
completion tokens that use per-operation return type deduction. For C++11
|
||
or earlier, a completion token's async_result specialisation must still
|
||
provide the nested typedef <code class="computeroutput">return_type</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Introduced three new concepts to support <code class="computeroutput">async_initiate</code>.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
<code class="computeroutput">completion_signature<T></code>: Checks if <code class="computeroutput">T</code>
|
||
is a signature of the form <code class="computeroutput">R(Args...)</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
<code class="computeroutput">completion_handler_for<T, Signature></code>: Checks if
|
||
<code class="computeroutput">T</code> is usable as a completion handler with the specified
|
||
signature.
|
||
</li>
|
||
<li class="listitem">
|
||
<code class="computeroutput">completion_token_for<T, Signature></code>: Checks if
|
||
<code class="computeroutput">T</code> is a completion token that can be used with async_initiate
|
||
and the specified signature.
|
||
</li>
|
||
<li class="listitem">
|
||
For backward compatibility with pre-concepts C++, the macros <code class="computeroutput">BOOST_ASIO_COMPLETION_SIGNATURE</code>,
|
||
<code class="computeroutput">BOOST_ASIO_COMPLETION_HANDLER_FOR</code>, and <code class="computeroutput">BOOST_ASIO_COMPLETION_TOKEN_FOR</code>
|
||
are provided. These macros expand to <code class="computeroutput">typename</code> when concepts
|
||
are unsupported.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added the nested template type <code class="computeroutput">rebind_executor</code> to all I/O
|
||
object types, as a way to generically rebind them to use alternative I/O
|
||
executors. For example:
|
||
<pre class="programlisting">using my_socket_type = tcp::socket::rebind_executor<my_executor_type>::other;
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the asynchronous operations' initiation function objects to report
|
||
their associated I/O executor via the nested type <code class="computeroutput">executor_type</code>
|
||
and member function <code class="computeroutput">get_executor()</code>. Note that the presence
|
||
of <code class="computeroutput">executor_type</code> and <code class="computeroutput">get_executor()</code> should be
|
||
treated as optional, and consequently it may be preferable to access them
|
||
via the <code class="computeroutput">associated_executor</code> trait and the <code class="computeroutput">get_associated_executor()</code>
|
||
helper function.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">default_completion_token</code> trait, so that every I/O
|
||
executor type now has an associated default completion token type. This
|
||
trait may be used in asynchronous operation declarations as follows:
|
||
<pre class="programlisting">template <
|
||
typename IoObject,
|
||
typename CompletionToken =
|
||
typename default_completion_token<
|
||
typename IoObject::executor_type
|
||
>::type
|
||
>
|
||
auto async_fyz(
|
||
IoObject& io_object,
|
||
CompletionToken&& token =
|
||
typename default_completion_token<
|
||
typename IoObject::executor_type
|
||
>::type{}
|
||
);
|
||
</pre>
|
||
<br> If not specialised, this trait type is <code class="computeroutput">void</code>, meaning
|
||
no default completion token type is available for the given I/O executor.
|
||
</li>
|
||
<li class="listitem">
|
||
Specialised the <code class="computeroutput">default_completion_token</code> trait for the <code class="computeroutput">use_awaitable</code>
|
||
completion token, so that it may be used as shown in the following example:
|
||
<pre class="programlisting">auto socket = use_awaitable.as_default_on(tcp::socket(my_context));
|
||
// ...
|
||
co_await socket.async_connect(my_endpoint); // Defaults to use_awaitable.
|
||
</pre>
|
||
<br> In this example, the type of the <code class="computeroutput">socket</code> object is transformed
|
||
from <code class="computeroutput">tcp::socket</code> to have an I/O executor with the default
|
||
completion token set to <code class="computeroutput">use_awaitable</code>. Alternatively, the
|
||
socket type may be computed directly:
|
||
<pre class="programlisting">using tcp_socket = use_awaitable_t<>::as_default_on_t<tcp::socket>;
|
||
tcp_socket socket(my_context);
|
||
// ...
|
||
co_await socket.async_connect(my_endpoint); // Defaults to use_awaitable.
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Added missing <code class="computeroutput">async_initiate</code> to the Windows-specific I/O objects'
|
||
asynchronous operations.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that the executor type is propagated to newly accepted sockets.
|
||
When synchronously or asynchronously accepting a new connection, but without
|
||
specifying an executor or execution context, the accept operation will
|
||
now correctly propagate the executor type from the acceptor to the socket.
|
||
For example, if your acceptor type is:
|
||
<pre class="programlisting">basic_socket_acceptor<ip::tcp, my_executor_type>
|
||
</pre>
|
||
<br> then your accepted socket type will be:
|
||
<pre class="programlisting">basic_stream_socket<ip::tcp, my_executor_type>
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to require that <code class="computeroutput">Protocol</code> copy and move operations
|
||
never throw.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to require that <code class="computeroutput">Endpoint</code> default constructor and move
|
||
operations never throw.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">noexcept</code> qualifier to protocol accessors.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">noexcept</code> qualifier to socket move constructors.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed issues associated with opening serial ports on Windows:
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Use the correct constant to initialise the RTS control flag.
|
||
</li>
|
||
<li class="listitem">
|
||
Specify a default baud rate (9600).
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a lost "outstanding work count" that can occur when an
|
||
asynchronous accept operation is automatically restarted.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h5"></a>
|
||
<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
|
||
1.14.1 / Boost 1.71</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Improved performance slightly by eliminating a redundant move construction
|
||
when completed handlers are dispatched.
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated a compiler warning by annotating a <code class="computeroutput">case</code> fall-through
|
||
in the free function <code class="computeroutput">connect()</code> implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">is_*_buffer_sequence</code> detection traits for user-defined
|
||
sequence types.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some Windows-specific warnings about an incompatible pointer cast
|
||
when obtaining the <code class="computeroutput">CancelIoEx</code> entry point.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to automatically set the defaults when opening a serial port on
|
||
Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the serial port <code class="computeroutput">get_option()</code> member function to be
|
||
const.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a name hiding issue with the WinRT stream-oriented socket backend's
|
||
<code class="computeroutput">shutdown</code> function.
|
||
</li>
|
||
<li class="listitem">
|
||
Applied a minor fix to the documentation for <code class="computeroutput">is_dynamic_buffer</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added some support for Haiku OS.
|
||
</li>
|
||
<li class="listitem">
|
||
Added wolfSSL compatability.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to require C++17 or later for coroutines TS support with clang.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a doxygen generation problem in the tutorial.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured example programs are correctly incorporated into the documentation.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h6"></a>
|
||
<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
|
||
1.14.0 / Boost 1.70</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added custom I/O executor support to I/O objects.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
All I/O objects now have an additional <code class="computeroutput">Executor</code> template
|
||
parameter. This template parameter defaults to the <code class="computeroutput">asio::executor</code>
|
||
type (the polymorphic executor wrapper) but can be used to specify
|
||
a user-defined executor type.
|
||
</li>
|
||
<li class="listitem">
|
||
I/O objects' constructors and functions that previously took an
|
||
<code class="computeroutput">asio::io_context&</code> now accept either an <code class="computeroutput">Executor</code>
|
||
or a reference to a concrete <code class="computeroutput">ExecutionContext</code> (such
|
||
as <code class="computeroutput">asio::io_context</code> or <code class="computeroutput">asio::thread_pool</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
Note: One potential source of breakage in existing user code is when
|
||
reusing an I/O object's <code class="computeroutput">io_context</code> for constructing
|
||
another I/O object, as in:
|
||
<pre class="programlisting">asio::steady_timer my_timer(my_socket.get_executor().context());
|
||
</pre>
|
||
<br> To fix this, either construct the second I/O object using
|
||
the first I/O object's executor:<br>
|
||
<pre class="programlisting">asio::steady_timer my_timer(my_socket.get_executor());
|
||
</pre>
|
||
<br> or otherwise explicitly pass the <code class="computeroutput">io_context</code>:<br>
|
||
<pre class="programlisting">asio::steady_timer my_timer(my_io_context);
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
The previously deprecated <code class="computeroutput">get_io_context</code> and <code class="computeroutput">get_io_service</code>
|
||
member functions have now been removed.
|
||
</li>
|
||
<li class="listitem">
|
||
The previously deprecated service template parameters, and the corresponding
|
||
classes, have now been removed.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">async_result</code> form with an <code class="computeroutput">initiate</code>
|
||
static member function.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
The <code class="computeroutput">async_result</code> template now supports a new form:
|
||
<pre class="programlisting">template <typename CompletionToken, typename Signature>
|
||
struct async_result
|
||
{
|
||
typedef /* ... */ return_type;
|
||
|
||
template <typename Initiation,
|
||
typename RawCompletionToken,
|
||
typename... Args>
|
||
static return_type initiate(
|
||
Initiation&& initiation,
|
||
RawCompletionToken&& token,
|
||
Args&&... args);
|
||
};
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
The <code class="computeroutput">initiate</code> member function must: (a) transform the
|
||
token into a completion handler object <code class="computeroutput">handler</code>; (b)
|
||
cause the invocation of the function object <code class="computeroutput">initiation</code>
|
||
as if by calling <code class="computeroutput">std::forward<Initiation>(initiation)(std::move(handler),
|
||
std::forward<Args>(args)...)</code>. Note that the invocation
|
||
of <code class="computeroutput">initiation</code> may be deferred (e.g. lazily evaluated),
|
||
in which case <code class="computeroutput">initiation</code> and <code class="computeroutput">args</code> must
|
||
be decay-copied and moved as required.
|
||
</li>
|
||
<li class="listitem">
|
||
A helper function template <code class="computeroutput">async_initiate</code> has also been
|
||
added as a wrapper for the invocation of <code class="computeroutput">async_result<>::initiate</code>.
|
||
For backward compatibility, this function supports both the old and
|
||
new <code class="computeroutput">async_result</code> forms.
|
||
</li>
|
||
<li class="listitem">
|
||
The composed operations examples have been updated to use <code class="computeroutput">async_initiate</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
The previously deprecated <code class="computeroutput">handler_type</code> trait and single-argument
|
||
form of <code class="computeroutput">async_result</code> have now been removed.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Updated the Coroutines TS support and promoted it to the <code class="computeroutput">asio</code>
|
||
namespace.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
The <code class="computeroutput">awaitable<></code>, <code class="computeroutput">co_spawn</code>, <code class="computeroutput">this_coro</code>,
|
||
<code class="computeroutput">detached</code>, and <code class="computeroutput">redirect_error</code> facilities
|
||
have been moved from the <code class="computeroutput">asio::experimental</code> namespace
|
||
to namespace <code class="computeroutput">asio</code>. As part of this change, the <code class="computeroutput">this_coro::token()</code>
|
||
awaitable has been superseded by the <code class="computeroutput">asio::use_awaitable</code>
|
||
completion token.
|
||
</li>
|
||
<li class="listitem">
|
||
Please note that the <code class="computeroutput">use_awaitable</code> and <code class="computeroutput">redirect_error</code>
|
||
completion tokens work only with asynchronous operations that use
|
||
the new form of <code class="computeroutput">async_result</code> with member function <code class="computeroutput">initiate</code>.
|
||
Furthermore, when using <code class="computeroutput">use_awaitable</code>, please be aware
|
||
that the asynchronous operation is not initiated until <code class="computeroutput">co_await</code>
|
||
is applied to the <code class="computeroutput">awaitable<></code>.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">DynamicBuffer_v2</code> concept which is CopyConstructible.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
This change adds a new set of type requirements for dynamic buffers,
|
||
<code class="computeroutput">DynamicBuffer_v2</code>, which supports copy construction.
|
||
These new type requirements enable dynamic buffers to be used as
|
||
arguments to user-defined composed operations, where the same dynamic
|
||
buffer object is used repeatedly for multiple underlying operations.
|
||
For example:<br>
|
||
<pre class="programlisting">template <typename DynamicBuffer>
|
||
void echo_line(tcp::socket& sock, DynamicBuffer buf)
|
||
{
|
||
n = asio::read_until(sock, buf, '\n');
|
||
asio::write(sock, buf, asio::transfer_exactly(n));
|
||
}
|
||
</pre>
|
||
<br>
|
||
</li>
|
||
<li class="listitem">
|
||
The original <code class="computeroutput">DynamicBuffer</code> type requirements have been
|
||
renamed to <code class="computeroutput">DynamicBuffer_v1</code>. These requirements continue
|
||
to be compatible with the Networking TS.
|
||
</li>
|
||
<li class="listitem">
|
||
New type traits <code class="computeroutput">is_dynamic_buffer_v1</code> and <code class="computeroutput">is_dynamic_buffer_v2</code>
|
||
have been added to test for conformance to <code class="computeroutput">DynamicBuffer_v1</code>
|
||
and <code class="computeroutput">DynamicBuffer_v2</code> respectively. The existing <code class="computeroutput">is_dynamic_buffer</code>
|
||
trait has been retained and delegates to <code class="computeroutput">is_dynamic_buffer_v1</code>
|
||
(unless <code class="computeroutput">BOOST_ASIO_NO_DYNAMIC_BUFFER_V1</code> is explicitly
|
||
defined, in which case it delegates to <code class="computeroutput">is_dynamic_buffer_v2</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
For convenience, the <code class="computeroutput">dynamic_string_buffer</code> and <code class="computeroutput">dynamic_vector_buffer</code>
|
||
classes conform to both <code class="computeroutput">DynamicBuffer_v1</code> and <code class="computeroutput">DynamicBuffer_v2</code>
|
||
requirements.
|
||
</li>
|
||
<li class="listitem">
|
||
When <code class="computeroutput">BOOST_ASIO_NO_DYNAMIC_BUFFER_V1</code> is defined, all
|
||
support for <code class="computeroutput">DynamicBuffer_v1</code> types and functions is
|
||
#ifdef-ed out. Support for using <code class="computeroutput">basic_streambuf</code> with
|
||
the <code class="computeroutput">read</code>, <code class="computeroutput">async_read</code>, <code class="computeroutput">read_until</code>,
|
||
<code class="computeroutput">async_read_until</code>, <code class="computeroutput">write</code>, and <code class="computeroutput">async_write</code>
|
||
functions is also disabled as a consequence.
|
||
</li>
|
||
<li class="listitem">
|
||
Note: This change should have no impact on existing source code that
|
||
simply uses dynamic buffers in conjunction with Asio's composed operations.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">async_compose</code> function that simplifies the implementation
|
||
of user-defined asynchronous operations.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a <code class="computeroutput">make_strand</code> function, which creates a <code class="computeroutput">strand</code>
|
||
with a deduced <code class="computeroutput">Executor</code> template argument.
|
||
</li>
|
||
<li class="listitem">
|
||
Relaxed the completion condition type requirements to only require move-constructibility
|
||
rather than copy-constructibility.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a constructor for <code class="computeroutput">local::basic_endpoint</code> that takes a
|
||
<code class="computeroutput">string_view</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the noexcept qualifier to various member functions of the <code class="computeroutput">ip::address</code>,
|
||
<code class="computeroutput">ip::address_v4</code>, <code class="computeroutput">ip::address_v6</code>, <code class="computeroutput">ip::basic_endpoint</code>,
|
||
and <code class="computeroutput">executor_work_guard</code> classes.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the noexcept qualifier to the <code class="computeroutput">buffer_sequence_begin</code>
|
||
and <code class="computeroutput">buffer_sequence_end</code> functions.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">BOOST_ASIO_DISABLE_VISIBILITY</code> configuration <code class="computeroutput">#define</code>
|
||
that allows visibility pragmas to be disabled. (Note: If symbols are hidden,
|
||
extra care must be taken to ensure that Asio types are not passed across
|
||
shared library API boundaries.)
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled recycling of the memory used to type-erase a function object with
|
||
the polymorphic executor.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed receive operations to return the correct number of bytes transferred
|
||
when truncation (<code class="computeroutput">error::message_size</code>) occurs on a datagram-oriented
|
||
socket.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed multicast behaviour on QNX by automatically applying <code class="computeroutput">SO_REUSEPORT</code>
|
||
when the <code class="computeroutput">reuse_address</code> option is set.
|
||
</li>
|
||
<li class="listitem">
|
||
Added inclusion of <code class="computeroutput">unistd.h</code> when targeting Haiku OS, to fix
|
||
feature detection.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">network_v[46].hpp</code> headers to the top-level convenience
|
||
header.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed calculation of absolute timeout when the backend uses <code class="computeroutput">pthread_cond_timedwait</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the range-based asynchronous connect operation to deduce the <code class="computeroutput">EndpointSequence</code>
|
||
iterator type rather than assume the presence of a <code class="computeroutput">const_iterator</code>
|
||
typedef.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">buffer_sequence_begin</code> and <code class="computeroutput">buffer_sequence_end</code>
|
||
to prevent implicit conversion. This change addresses an issue where a
|
||
call to <code class="computeroutput">buffer_sequence_begin</code> or <code class="computeroutput">buffer_sequence_end</code>
|
||
could trigger an implicit conversion to <code class="computeroutput">const_buffer</code> or <code class="computeroutput">mutable_buffer</code>.
|
||
Whenever this implicit conversion occurred, the return value of <code class="computeroutput">buffer_sequence_begin</code>
|
||
or <code class="computeroutput">buffer_sequence_end</code> would point to a temporary object.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured SSL handshake errors are propagated to the peer before the local
|
||
operation completes.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed the <code class="computeroutput">eof</code> error on SSL shutdown as it actually indicates
|
||
success.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a fallback error code for when we OpenSSL produces an <code class="computeroutput">SSL_ERROR_SYSCALL</code>
|
||
result without an associated error.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed composed asynchronous read and write operations to move, rather
|
||
than copy, the buffer sequence objects when the composed operation implementation
|
||
is moved.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput"><atomic></code> when targeting apple/clang/libc++
|
||
with recent Xcode versions, even for C++03. This fixes a warning about
|
||
the deprecation of <code class="computeroutput">OSMemoryBarrier</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compile errors that occur when using the composed read and write
|
||
operations with MSVC 11.0, by disabling <code class="computeroutput">decltype</code> support for
|
||
that compiler.
|
||
</li>
|
||
<li class="listitem">
|
||
Increased the default value of <code class="computeroutput">_WIN32_WINNT</code> to <code class="computeroutput">0x0601</code>
|
||
(Windows 7).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">dispatch</code> documentation to note that it may call the
|
||
supplied function object in the current thread.
|
||
</li>
|
||
<li class="listitem">
|
||
Updated <code class="computeroutput">post</code> and <code class="computeroutput">defer</code> documentation to clarify
|
||
the the distinction between them.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compilation errors in the read and write composed operations when
|
||
used with MSVC 11.0.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific issue where the execution context associated with
|
||
<code class="computeroutput">system_executor</code> was not being correctly cleaned up on exit.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h7"></a>
|
||
<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
|
||
1.12.2 / Boost 1.69</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed a problem with the detection of <code class="computeroutput">std::future</code> availability
|
||
with libstdc++.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compile error in regex overload of <code class="computeroutput">read_until</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a timer heap corruption issue that can occur when moving a cancelled
|
||
timer.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed detection of <code class="computeroutput">std::experimental::string_view</code> and <code class="computeroutput">std::string_view</code>
|
||
with newer clang/libc++.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed MSVC version detection for availability of <code class="computeroutput">std::invoke_result</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the buffer sequence traits to test the new requirements, if <code class="computeroutput">decltype</code>
|
||
is available.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an MSVC issue when building with exceptions disabled.
|
||
</li>
|
||
<li class="listitem">
|
||
Added SSL context options for TLS v1.3.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a compile-time test for TLS v1 support.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the macro used to test for TLS v1.2 support.
|
||
</li>
|
||
<li class="listitem">
|
||
Prevented global objects from being created once per thread on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a crash when using <code class="computeroutput">size()</code>, <code class="computeroutput">max_size()</code> or
|
||
<code class="computeroutput">empty()</code> on default-constructed resolver results.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to move the return value in basic_resolver_results::begin() to
|
||
avoid copying.
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled move support for the Intel Compiler.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">std::string_view</code> detection issue when using clang-cl.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the handler tracking operation name for <code class="computeroutput">io_context::executor_type::dispatch</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a buffer overflow that could occur when parsing an address string
|
||
with a 64-bit scope id.
|
||
</li>
|
||
<li class="listitem">
|
||
Added examples showing how to write composed operations.
|
||
</li>
|
||
<li class="listitem">
|
||
Added C++11 versions of the Timeouts, Timers, SOCKS4 and SSL examples.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed minor issues in documentation and examples.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h8"></a>
|
||
<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
|
||
1.12.1 / Boost 1.67</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added missing const qualifier to <code class="computeroutput">basic_socket_acceptor::get_option</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Worked around a parsing error that occurs with some versions of gcc.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed broken code samples in tutorial.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new experimental features. (Note that "experimental" features
|
||
may be changed without notice in subsequent releases.)
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">experimental::detached</code> completion token.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">experimental::redirect_error</code> completion token.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">experimental::co_spawn</code> facility for integration
|
||
with the coroutines technical specification.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Updated timeout examples to use latest features.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Used <code class="computeroutput">asio::steady_timer</code> rather than <code class="computeroutput">asio::deadline_timer</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Used <code class="computeroutput">asio::dynamic_buffer</code> rather than <code class="computeroutput">asio::streambuf</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Used timed <code class="computeroutput">asio::io_context::run_for()</code> function for
|
||
blocking clients.
|
||
</li>
|
||
<li class="listitem">
|
||
Added example showing a custom completion token for blocking with
|
||
timeouts.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed unit tests to compile when <code class="computeroutput">BOOST_ASIO_NO_DEPRECATED</code>
|
||
is defined.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed socket iostreams to use chrono by default, to fix compatibility
|
||
with the Networking TS. Define <code class="computeroutput">BOOST_ASIO_USE_BOOST_DATE_TIME_FOR_SOCKET_IOSTREAM</code>
|
||
to enable the old Boost.Date_Time interface in <code class="computeroutput">basic_socket_streambuf</code>
|
||
and <code class="computeroutput">basic_socket_iostream</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Updated examples to use chrono rather than Boost.Date_Time.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an incorrect member function detector in the <code class="computeroutput">is_dynamic_buffer</code>
|
||
trait.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an <code class="computeroutput">async_result</code> incompatibility with deprecated <code class="computeroutput">handler_type</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a missing move optimisation in the SSL stream implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed incorrect <code class="computeroutput">basic_resolver_results::value_type</code> typedef.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error with some OpenSSL versions when <code class="computeroutput">SSL_OP_NO_COMPRESSION</code>
|
||
is defined.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">add_certificate_authority</code> to process multiple certificates
|
||
in a bundle.
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated deprecation warning with MSVC by using <code class="computeroutput">std::invoke_result</code>
|
||
rather than <code class="computeroutput">std::result_of</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">std::string_view</code> for C++17 or later, and <code class="computeroutput">std::experimental::string_view</code>
|
||
for C++14. Define the preprocessor macro <code class="computeroutput">BOOST_ASIO_DISABLE_STD_STRING_VIEW</code>
|
||
to force the use of std::experimental::string_view (assuming it is available)
|
||
when compiling in C++17 mode.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured <code class="computeroutput">DynamicBuffer</code> template arguments are decayed before
|
||
using in <code class="computeroutput">enable_if</code> tests.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed documentation to distinguish legacy completion handlers (which
|
||
are still required to be CopyConstructible) from new MoveConstructible
|
||
handlers.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed a discarded return value warning in the buffer debugging support.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">basic_yield_context</code> to work with completion signatures
|
||
containing reference parameters.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that stackful coroutines launched using <code class="computeroutput">spawn()</code> correctly
|
||
store decayed copies of their function and handler arguments.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some compatibility issues with Android.
|
||
</li>
|
||
<li class="listitem">
|
||
Added cross-compilation support to Jamfiles.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some minor portability issues in examples.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h9"></a>
|
||
<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
|
||
1.12.0 / Boost 1.66</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
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>).
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
See the <a class="link" href="net_ts.html" title="Networking TS compatibility">list</a> of new interfaces
|
||
and, where applicable, the corresponding old interfaces that have
|
||
been superseded.
|
||
</li>
|
||
<li class="listitem">
|
||
The service template parameters, and the corresponding classes, are
|
||
disabled by default. For example, instead of <code class="computeroutput">basic_socket<Protocol,
|
||
SocketService></code> we now have simply <code class="computeroutput">basic_socket<Protocol></code>.
|
||
The old interface can be enabled by defining the <code class="computeroutput">BOOST_ASIO_ENABLE_OLD_SERVICES</code>
|
||
macro.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Removed previously deprecated functions.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for customised handler tracking.
|
||
</li>
|
||
<li class="listitem">
|
||
Added reactor-related (i.e. descriptor readiness) events to handler tracking.
|
||
</li>
|
||
<li class="listitem">
|
||
Added special <a class="link" href="overview/core/concurrency_hint.html" title="Concurrency Hints">concurrency
|
||
hint</a> values that may be used to disable locking on a per <code class="computeroutput">io_context</code>
|
||
basis.
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled perfect forwarding for the first <code class="computeroutput">ssl::stream<></code>
|
||
constructor argument.
|
||
</li>
|
||
<li class="listitem">
|
||
Added ability to release ownership of the underlying native socket. (Requires
|
||
Windows 8.1 or later when using the I/O completion port backend.)
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h10"></a>
|
||
<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
|
||
1.10.10 / Boost 1.65</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Changed to require <code class="literal">g++</code> versions >= 4.7 to use standard
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled use of <code class="computeroutput">constexpr</code> and variadic templates with recent
|
||
MSVC versions.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a race condition in the Linux epoll backend, which may occur when
|
||
a socket or descriptor is closed while another thread is blocked on epoll.
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated use of deprecated <code class="computeroutput">auto_ptr</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed misplaced use of <code class="computeroutput">asio_handler_is_continuation</code> result
|
||
in reactive <code class="computeroutput">async_accept</code> implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">poll.h</code> rather than <code class="computeroutput">sys/poll.h</code>
|
||
on some modern POSIX platforms (<a href="https://svn.boost.org/trac/boost/ticket/12419" target="_top">#12419</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed MSVC intellisense detection.
|
||
</li>
|
||
<li class="listitem">
|
||
Disabled use of the <code class="computeroutput">__thread</code> keyword extension for android/clang/x86
|
||
targets.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h11"></a>
|
||
<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
|
||
1.10.9 / Boost 1.64</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added limited support for using regular file descriptors (where I/O operations
|
||
should never fail with <code class="computeroutput">EAGAIN</code> or <code class="computeroutput">EWOULDBLOCK</code>)
|
||
with <code class="computeroutput">posix::stream_descriptor</code>, when using the Linux epoll
|
||
backend.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">allocator_traits</code> to rebind allocators in C++11
|
||
or later.
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated a double "construction" issue in the converting move
|
||
constructors.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">ssl::context_base</code> enumerations to enable support
|
||
for any TLS version, and improved consistency of SSL/TLS version handling
|
||
across OpenSSL releases.
|
||
</li>
|
||
<li class="listitem">
|
||
Applied more changes to address OpenSSL 1.1 compatibility.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error when OpenSSL compression is disabled at compile time.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed some spurious unused variable warnings issued by <code class="literal">gcc</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/12302" target="_top">#12302</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Worked around a new clang warning issued for usage of the comma operator.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed various header ordering problems.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to refer <code class="computeroutput">std::atomic_thread_fence</code>, when available,
|
||
to eliminate a deprecated function warning on newest macOS SDK (<a href="https://svn.boost.org/trac/boost/ticket/12482" target="_top">#12482</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a workaround for broken <code class="computeroutput">getaddrinfo</code> in Apple's NAT64
|
||
environment.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an exception safety issue in the internal hash map implementation.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h12"></a>
|
||
<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
|
||
1.10.8 / Boost 1.62</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added compatibility with OpenSSL 1.1.0 (<a href="https://svn.boost.org/trac/boost/ticket/12238" target="_top">#12238</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed out-of-bounds iterator use in <code class="computeroutput">asio::connect()</code> when the
|
||
<code class="computeroutput">connect_condition</code> returns an end iterator (<a href="https://svn.boost.org/trac/boost/ticket/12354" target="_top">#12354</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed a workaround that was previously added for broken Windows firewalls
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added call to <code class="computeroutput">SSL_COMP_free_compression_methods</code> to fix two
|
||
memory leaks reported at shutdown, for OpenSSL versions >= 1.0.2 and
|
||
< 1.1.0 (<a href="https://svn.boost.org/trac/boost/ticket/10795" target="_top">#10795</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">use_future</code> compile error encountered on some standard
|
||
library implementations, by changing <code class="computeroutput">std::allocator<void></code>
|
||
use to a non-void template parameter.
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled use of native <code class="computeroutput">getaddrinfo</code> by default on Apple OSes,
|
||
rather than emulation in terms of <code class="computeroutput">getipnodebyname</code>.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h13"></a>
|
||
<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
|
||
1.10.7 / Boost 1.60</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added support for Windows 8.1 Store apps.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed macro multiple definition error on Microsoft Visual Studio 2015 (<a href="https://svn.boost.org/trac/boost/ticket/11539" target="_top">#11539</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput">OPENSSL_NO_SSL3</code>
|
||
feature test <code class="computeroutput">#define</code> (<a href="https://svn.boost.org/trac/boost/ticket/11754" target="_top">#11754</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed Asio's SSL wrapper to use OpenSSL's new <code class="computeroutput">SSL_CTX_clear_chain_certs</code>
|
||
function, if available.
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed a clang 3.6+ warning about unused typedefs (<a href="https://svn.boost.org/trac/boost/ticket/11767" target="_top">#11767</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Regenerated certificates used by SSL examples.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed buffer sizes passed to <code class="computeroutput">strncat</code> in the <code class="computeroutput">getaddrinfo</code>
|
||
emulation and in the SSL wrapper's password handling.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed Windows backend to use non-macro <code class="computeroutput">CreateEventW</code> rather
|
||
than <code class="computeroutput">CreateEvent</code> (<a href="https://svn.boost.org/trac/boost/ticket/11732" target="_top">#11732</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h14"></a>
|
||
<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
|
||
1.10.6 / Boost 1.58</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Ensured errors generated by Windows' <code class="computeroutput">ConnectEx</code> function are
|
||
mapped to their portable equivalents (<a href="https://svn.boost.org/trac/boost/ticket/10744" target="_top">#10744</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added new macro <code class="computeroutput">BOOST_ASIO_DISABLE_CONNECTEX</code> to allow use
|
||
of <code class="computeroutput">ConnectEx</code> to be explicitly disabled.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a race condition in <code class="computeroutput">windows::object_handle</code> when there
|
||
are pending wait operations on destruction (<a href="https://svn.boost.org/trac/boost/ticket/10624" target="_top">#10624</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed IPv6 address parsing on FreeBSD, where a trailing scope ID would
|
||
cause conversion to fail with <code class="computeroutput">EINVAL</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Worked around shared library visibility issues by ensuring Asio types use
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the SSL wrapper to call the password callback when loading an in-memory
|
||
key (<a href="https://svn.boost.org/trac/boost/ticket/10828" target="_top">#10828</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed false SSL error reports by ensuring that the SSL error queue is cleared
|
||
prior to each operation.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an <code class="computeroutput">ssl::stream<></code> bug that may result in spurious
|
||
'short read' errors.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed a redundant null pointer check in the SSL engine (<a href="https://svn.boost.org/trac/boost/ticket/10088" target="_top">#10088</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added options for disabling TLS v1.1 and v1.2 (<a href="https://svn.boost.org/trac/boost/ticket/10690" target="_top">#10690</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Removed use of deprecated OpenSSL function <code class="computeroutput">ERR_remove_state</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed detection of C++11 <code class="computeroutput">std::addressof</code> with <code class="literal">g++</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/10982" target="_top">#10982</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed multicast test to treat certain <code class="computeroutput">join_group</code> failures
|
||
as non-fatal.
|
||
</li>
|
||
<li class="listitem">
|
||
Decoupled Asio unit tests from Boost.Test (<a href="https://svn.boost.org/trac/boost/ticket/11116" target="_top">#11116</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the tutorial to use <code class="computeroutput">std::endl</code> to ensure output is
|
||
flushed.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an unsigned integer overflow reported by Clang's integer sanitizer.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for move-only return types when using a <code class="computeroutput">yield_context</code>
|
||
object with asynchronous operations.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">yield_context</code> to allow reentrant calls to the completion
|
||
handler from an initiating function.
|
||
</li>
|
||
<li class="listitem">
|
||
Updated detection of Windows Runtime to work with latest Windows SDK.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h15"></a>
|
||
<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
|
||
1.10.5 / Boost 1.57</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed the <code class="literal">kqueue</code> reactor so that it works on FreeBSD
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/10606" target="_top">#10606</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an issue in the <code class="literal">kqueue</code> reactor which resulted
|
||
in spinning when using serial ports on Mac OS (<a href="https://svn.boost.org/trac/boost/ticket/10496" target="_top">#10496</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="literal">kqueue</code> reactor support for read-only file descriptors
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/10367" target="_top">#10367</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error when using the <code class="literal">/dev/poll</code> reactor
|
||
(<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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the Windows backend to use <code class="computeroutput">WSASocketW</code>, as <code class="computeroutput">WSASocketA</code>
|
||
has been deprecated (<a href="https://svn.boost.org/trac/boost/ticket/10534" target="_top">#10534</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some warnings reported by Visual C++ 2013 (<a href="https://svn.boost.org/trac/boost/ticket/10376" target="_top">#10376</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed integer type used in the WinRT version of the byte-order conversion
|
||
functions (<a href="https://svn.boost.org/trac/boost/ticket/10539" target="_top">#10539</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed documentation to indicate that <code class="computeroutput">use_future</code> and <code class="computeroutput">spawn()</code>
|
||
are not made available when including the <code class="computeroutput">asio.hpp</code> convenience
|
||
header (<a href="https://svn.boost.org/trac/boost/ticket/10567" target="_top">#10567</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Explicitly marked <code class="computeroutput">asio::strand</code> as deprecated. Use <code class="computeroutput">asio::io_service::strand</code>
|
||
instead.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h16"></a>
|
||
<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
|
||
1.10.4 / Boost 1.56</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Stopped using certain Winsock functions that are marked as deprecated in
|
||
the latest Visual C++ and Windows SDK.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a shadow variable warning on Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a regression in the <code class="literal">kqueue</code> backend that was introduced
|
||
in Asio 1.10.2.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a workaround for building the unit tests with <code class="literal">gcc</code>
|
||
on AIX.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h17"></a>
|
||
<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
|
||
1.10.3</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Worked around a <code class="literal">gcc</code> problem to do with anonymous enums
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/10042" target="_top">#10042</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Reverted the Windows <code class="computeroutput">HANDLE</code> backend change to ignore <code class="computeroutput">ERROR_MORE_DATA</code>.
|
||
Instead, the error will be propagated as with any other (i.e. in an <code class="computeroutput">error_code</code>
|
||
or thrown as a <code class="computeroutput">system_error</code>), and the number of bytes transferred
|
||
will be returned. For code that needs to handle partial messages, the
|
||
<code class="computeroutput">error_code</code> overload should be used (<a href="https://svn.boost.org/trac/boost/ticket/10034" target="_top">#10034</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an off-by-one error in the <code class="computeroutput">signal_set</code> implementation's
|
||
signal number check (<a href="https://svn.boost.org/trac/boost/ticket/9324" target="_top">#9324</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the Windows IOCP backend to not assume that <code class="computeroutput">SO_UPDATE_CONNECT_CONTEXT</code>
|
||
is defined (<a href="https://svn.boost.org/trac/boost/ticket/10016" target="_top">#10016</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific issue, introduced in Asio 1.10.2, by using <code class="computeroutput">VerifyVersionInfo</code>
|
||
rather than <code class="computeroutput">GetVersionEx</code>, as <code class="computeroutput">GetVersionEx</code> has
|
||
been deprecated.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use SSE2 intrinsics rather than inline assembly, to allow the
|
||
Cray compiler to work.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h18"></a>
|
||
<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
|
||
1.10.2</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">asio::spawn()</code> to work correctly with new Boost.Coroutine
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that incomplete <code class="computeroutput">asio::spawn()</code> coroutines are correctly
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed delegation of continuation hook for handlers produced by <code class="computeroutput">io_service::wrap()</code>
|
||
and <code class="computeroutput">strand::wrap()</code> (<a href="https://svn.boost.org/trac/boost/ticket/9741" target="_top">#9741</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the Windows I/O completion port backend to use <code class="computeroutput">ConnectEx</code>,
|
||
if available, for connection-oriented IP sockets.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">io_service</code> backend for non-Windows (and non-IOCP
|
||
Windows) platforms to use a single condition variable per <code class="computeroutput">io_service</code>
|
||
instance. This addresses a potential race condition when <code class="computeroutput">run_one()</code>
|
||
is used from multiple threads.
|
||
</li>
|
||
<li class="listitem">
|
||
Prevented integer overflow when computing timeouts based on some <code class="computeroutput">boost::chrono</code>
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Made further changes to <code class="computeroutput">EV_CLEAR</code> handling in the kqueue backend,
|
||
to address other cases where the <code class="computeroutput">close()</code> system call may hang
|
||
on Mac OS X.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed infinite recursion in implementation of <code class="computeroutput">resolver_query_base::flags::operator~</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/9548" target="_top">#9548</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Made the <code class="computeroutput">select</code> reactor more efficient on Windows for large
|
||
numbers of sockets (<a href="https://svn.boost.org/trac/boost/ticket/9528" target="_top">#9528</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific type-aliasing issue reported by <code class="literal">gcc</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/9550" target="_top">#9550</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Prevented execution of compile-time-only buffer test to avoid triggering
|
||
an address sanitiser warning (<a href="https://svn.boost.org/trac/boost/ticket/8295" target="_top">#8295</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Disabled the <code class="computeroutput">GetQueuedCompletionStatus</code> timeout workaround
|
||
on recent versions of Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for string-based scope IDs when using link-local multicast
|
||
addresses.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed IPv6 multicast group join to use the address's scope ID as the
|
||
interface, if an interface is not explicitly specified.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed multicast test failure on Mac OS X and the BSDs by using a link-local
|
||
multicast address.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h19"></a>
|
||
<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
|
||
1.10.1 / Boost 1.55</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Implemented a limited port to Windows Runtime. This support requires that
|
||
the language extensions be enabled. Due to the restricted facilities exposed
|
||
by the Windows Runtime API, the port also comes with the following caveats:
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
The core facilities such as the <code class="computeroutput">io_service</code>, <code class="computeroutput">strand</code>,
|
||
buffers, composed operations, timers, etc., should all work as normal.
|
||
</li>
|
||
<li class="listitem">
|
||
For sockets, only client-side TCP is supported.
|
||
</li>
|
||
<li class="listitem">
|
||
Explicit binding of a client-side TCP socket is not supported.
|
||
</li>
|
||
<li class="listitem">
|
||
The <code class="computeroutput">cancel()</code> function is not supported for sockets.
|
||
Asynchronous operations may only be cancelled by closing the socket.
|
||
</li>
|
||
<li class="listitem">
|
||
Operations that use <code class="computeroutput">null_buffers</code> are not supported.
|
||
</li>
|
||
<li class="listitem">
|
||
Only <code class="computeroutput">tcp::no_delay</code> and <code class="computeroutput">socket_base::keep_alive</code>
|
||
options are supported.
|
||
</li>
|
||
<li class="listitem">
|
||
Resolvers do not support service names, only numbers. I.e. you must
|
||
use "80" rather than "http".
|
||
</li>
|
||
<li class="listitem">
|
||
Most resolver query flags have no effect.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a regression (introduced in Boost 1.54) where, on some platforms,
|
||
errors from <code class="computeroutput">async_connect</code> were not correctly propagated through
|
||
to the completion handler (<a href="https://svn.boost.org/trac/boost/ticket/8795" target="_top">#8795</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific regression (introduced in Boost 1.54) that occurs
|
||
when multiple threads are running an <code class="computeroutput">io_service</code>. When the
|
||
bug occurs, the result of an asynchronous operation (error and bytes tranferred)
|
||
is incorrectly discarded and zero values used instead. For TCP sockets
|
||
this results in spurious end-of-file notifications (<a href="https://svn.boost.org/trac/boost/ticket/8933" target="_top">#8933</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a bug in handler tracking, where it was not correctly printing out
|
||
some handler IDs (<a href="https://svn.boost.org/trac/boost/ticket/8808" target="_top">#8808</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the comparison used to test for successful synchronous accept operations
|
||
so that it works correctly with unsigned socket descriptors (<a href="https://svn.boost.org/trac/boost/ticket/8752" target="_top">#8752</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured the signal number is correctly passed to the completion handler
|
||
when starting an <code class="computeroutput">async_wait</code> on a signal that is already raised
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/8738" target="_top">#8738</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Suppressed a g++ 4.8+ warning about unused typedefs (<a href="https://svn.boost.org/trac/boost/ticket/8980" target="_top">#8980</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled the move optimisation for handlers that use the default invocation
|
||
hook (<a href="https://svn.boost.org/trac/boost/ticket/8624" target="_top">#8624</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Clarified that programs must not issue overlapping <code class="computeroutput">async_write_at</code>
|
||
operations (<a href="https://svn.boost.org/trac/boost/ticket/8669" target="_top">#8669</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the Windows <code class="computeroutput">HANDLE</code> backend to treat <code class="computeroutput">ERROR_MORE_DATA</code>
|
||
as a non-fatal error when returned by <code class="computeroutput">GetOverlappedResult</code>
|
||
for a synchronous read (<a href="https://svn.boost.org/trac/boost/ticket/8722" target="_top">#8722</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Visual C++ language extensions use <code class="computeroutput">generic</code> as a keyword. Added
|
||
a workaround that renames the namespace to <code class="computeroutput">cpp_generic</code> when
|
||
those language extensions are in effect.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some asynchronous operations that missed out on getting <code class="computeroutput">async_result</code>
|
||
support in Boost 1.54. In particular, the buffered stream templates have
|
||
been updated so that they adhere to current handler patterns (<a href="https://svn.boost.org/trac/boost/ticket/9000" target="_top">#9000</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/9001" target="_top">#9001</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Enabled move support for Microsoft Visual Studio 2012 (<a href="https://svn.boost.org/trac/boost/ticket/8959" target="_top">#8959</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">use_future</code> support for Microsoft Visual Studio 2012.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed a use of <code class="computeroutput">std::min</code> in the Windows IOCP backend to avoid
|
||
a dependency on the <code class="computeroutput"><algorithm></code> header (<a href="https://svn.boost.org/trac/boost/ticket/8758" target="_top">#8758</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated some unnecessary handler copies.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed support for older versions of OpenSSL that do not provide the <code class="computeroutput">SSL_CTX_clear_options</code>
|
||
function (<a href="https://svn.boost.org/trac/boost/ticket/9273" target="_top">#9273</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed various minor and cosmetic issues in code and documentation (including
|
||
<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>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h20"></a>
|
||
<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
|
||
1.10.0 / Boost 1.54</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added new traits classes, <code class="computeroutput">handler_type</code> and <code class="computeroutput">async_result</code>,
|
||
that allow the customisation of the return type of an initiating function.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">asio::spawn()</code> function, a high-level wrapper for
|
||
running stackful coroutines, based on the Boost.Coroutine library. The
|
||
<code class="computeroutput">spawn()</code> function enables programs to implement asynchronous
|
||
logic in a synchronous manner. For example: <code class="computeroutput">size_t n = my_socket.async_read_some(my_buffer,
|
||
yield);</code>. For further information, see <a class="link" href="overview/core/spawn.html" title="Stackful Coroutines">Stackful
|
||
Coroutines</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">asio::use_future</code> special value, which provides first-class
|
||
support for returning a C++11 <code class="computeroutput">std::future</code> from an asynchronous
|
||
operation's initiating function. For example: <code class="computeroutput">future<size_t>
|
||
= my_socket.async_read_some(my_buffer, asio::use_future);</code>. For further
|
||
information, see <a class="link" href="overview/cpp2011/futures.html" title="Futures">C++
|
||
2011 Support - Futures</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Promoted the stackless coroutine class and macros to be part of Asio's
|
||
documented interface, rather than part of the HTTP server 4 example. For
|
||
further information, see <a class="link" href="overview/core/coroutine.html" title="Stackless Coroutines">Stackless
|
||
Coroutines</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new handler hook called <code class="computeroutput">asio_handler_is_continuation</code>.
|
||
Asynchronous operations may represent a continuation of the asynchronous
|
||
control flow associated with the current executing handler. The <code class="computeroutput">asio_handler_is_continuation</code>
|
||
hook can be customised to return <code class="computeroutput">true</code> if this is the case,
|
||
and Asio's implementation can use this knowledge to optimise scheduling
|
||
of the new handler. To cover common cases, Asio customises the hook for
|
||
strands, <code class="computeroutput">spawn()</code> and composed asynchronous operations.
|
||
</li>
|
||
<li class="listitem">
|
||
Added four new generic protocol classes, <code class="computeroutput">generic::datagram_protocol</code>,
|
||
<code class="computeroutput">generic::raw_protocol</code>, <code class="computeroutput">generic::seq_packet_protocol</code>
|
||
and <code class="computeroutput">generic::stream_protocol</code>, which implement the <code class="computeroutput">Protocol</code>
|
||
type requirements, but allow the user to specify the address family (e.g.
|
||
<code class="computeroutput">AF_INET</code>) and protocol type (e.g. <code class="computeroutput">IPPROTO_TCP</code>)
|
||
at runtime. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
|
||
for Other Protocols</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added C++11 move constructors that allow the conversion of a socket (or
|
||
acceptor) into a more generic type. For example, an <code class="computeroutput">ip::tcp::socket</code>
|
||
can be converted into a <code class="computeroutput">generic::stream_protocol::socket</code> via
|
||
move construction. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
|
||
for Other Protocols</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Extended the <code class="computeroutput">basic_socket_acceptor<></code>'s <code class="computeroutput">accept()</code>
|
||
and <code class="computeroutput">async_accept()</code> functions to allow a new connection to
|
||
be accepted directly into a socket of a more generic type. For example,
|
||
an <code class="computeroutput">ip::tcp::acceptor</code> can be used to accept into a <code class="computeroutput">generic::stream_protocol::socket</code>
|
||
object. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
|
||
for Other Protocols</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Moved existing examples into a C++03-specific directory, and added a new
|
||
directory for C++11-specific examples. A limited subset of the C++03 examples
|
||
have been converted to their C++11 equivalents.
|
||
</li>
|
||
<li class="listitem">
|
||
Various SSL enhancements. Thanks go to Nick Jones, on whose work these
|
||
changes are based.
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Added support for SSL handshakes with re-use of data already read
|
||
from the wire. New overloads of the <code class="computeroutput">ssl::stream<></code>
|
||
class's <code class="computeroutput">handshake()</code> and <code class="computeroutput">async_handshake()</code>
|
||
functions have been added. These accept a <code class="computeroutput">ConstBufferSequence</code>
|
||
to be used as initial input to the ssl engine for the handshake procedure.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for creation of TLSv1.1 and TLSv1.2 <code class="computeroutput">ssl::context</code>
|
||
objects.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a <code class="computeroutput">set_verify_depth()</code> function to the <code class="computeroutput">ssl::context</code>
|
||
and <code class="computeroutput">ssl::stream<></code> classes.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the ability to load SSL certificate and key data from memory
|
||
buffers. New functions, <code class="computeroutput">add_certificate_authority()</code>,
|
||
<code class="computeroutput">use_certificate()</code>, <code class="computeroutput">use_certificate_chain()</code>,
|
||
<code class="computeroutput">use_private_key()</code>, <code class="computeroutput">use_rsa_private_key()</code>
|
||
and <code class="computeroutput">use_tmp_dh()</code>, have been added to the <code class="computeroutput">ssl::context</code>
|
||
class.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">ssl::context</code> to automatically disable SSL compression
|
||
by default. To enable, use the new <code class="computeroutput">ssl::context::clear_options()</code>
|
||
function, as in <code class="computeroutput">my_context.clear_options(ssl::context::no_compression)</code>.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a potential deadlock in <code class="computeroutput">signal_set</code> implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an error in acceptor example in documentation <a href="https://svn.boost.org/trac/boost/ticket/8421" target="_top">#8421</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed copy-paste errors in waitable timer documentation <a href="https://svn.boost.org/trac/boost/ticket/8602" target="_top">#8602</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added assertions to satisfy some code analysis tools <a href="https://svn.boost.org/trac/boost/ticket/7739" target="_top">#7739</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a malformed <code class="computeroutput">#warning</code> directive <a href="https://svn.boost.org/trac/boost/ticket/7939" target="_top">#7939</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a potential data race in the Linux <code class="computeroutput">epoll</code> implementation.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific bug, where certain operations might generate an
|
||
<code class="computeroutput">error_code</code> with an invalid (i.e. <code class="computeroutput">NULL</code>) <code class="computeroutput">error_category</code>
|
||
<a href="https://svn.boost.org/trac/boost/ticket/8613" target="_top">#8613</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">basic_waitable_timer</code>'s underlying implementation so
|
||
that it can handle any <code class="computeroutput">time_point</code> value without overflowing
|
||
the intermediate duration objects.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a problem with lost thread wakeups that can occur when making concurrent
|
||
calls to <code class="computeroutput">run()</code> and <code class="computeroutput">poll()</code> on the same <code class="computeroutput">io_service</code>
|
||
object <a href="https://svn.boost.org/trac/boost/ticket/8354" target="_top">#8354</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed implementation of asynchronous connect operation so that it can cope
|
||
with spurious readiness notifications from the reactor <a href="https://svn.boost.org/trac/boost/ticket/7961" target="_top">#7961</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a memory leak in the <code class="computeroutput">ssl::rfc2818_verification</code> class.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a mechanism for disabling automatic Winsock initialisation <a href="https://svn.boost.org/trac/boost/ticket/3605" target="_top">#3605</a>.
|
||
See the header file <code class="literal">boost/asio/detail/winsock_init.hpp</code>
|
||
for details.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h21"></a>
|
||
<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
|
||
1.8.3 / Boost 1.53</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed some 64-to-32-bit conversion warnings (<a href="https://svn.boost.org/trac/boost/ticket/7459" target="_top">#7459</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed some small errors in documentation and comments (<a href="https://svn.boost.org/trac/boost/ticket/7761" target="_top">#7761</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an error in the example embedded in <code class="computeroutput">basic_socket::get_option</code>'s
|
||
documentation (<a href="https://svn.boost.org/trac/boost/ticket/7562" target="_top">#7562</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">long</code> rather than <code class="computeroutput">int</code> for SSL_CTX
|
||
options, to match OpenSSL (<a href="https://svn.boost.org/trac/boost/ticket/7209" target="_top">#7209</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">_snwprintf</code> to address a compile error due to
|
||
the changed <code class="computeroutput">swprintf</code> signature in recent versions of MinGW
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/7373" target="_top">#7373</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a deadlock that can occur on Windows when shutting down a pool of
|
||
<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>).
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed UNIX domain socket example to treat errors from <code class="computeroutput">accept</code>
|
||
as non-fatal (<a href="https://svn.boost.org/trac/boost/ticket/7488" target="_top">#7488</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a small block recycling optimisation to improve default memory allocation
|
||
behaviour.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h22"></a>
|
||
<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
|
||
1.8.2 / Boost 1.51</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed an incompatibility between <code class="computeroutput">ip::tcp::iostream</code> and C++11
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/7162" target="_top">#7162</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Decorated GCC attribute names with underscores to prevent interaction with
|
||
user-defined macros (<a href="https://svn.boost.org/trac/boost/ticket/6415" target="_top">#6415</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added missing <code class="computeroutput">#include <cctype></code>, needed for some versions
|
||
of MinGW.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="literal">gcc</code>'s atomic builtins on ARM CPUs, when
|
||
available (<a href="https://svn.boost.org/trac/boost/ticket/7140" target="_top">#7140</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed strand destruction to be a no-op, to allow strand objects to be
|
||
destroyed after their associated <code class="computeroutput">io_service</code> has been destroyed.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for some newer versions of glibc which provide the <code class="computeroutput">epoll_create1()</code>
|
||
function but always fail with <code class="computeroutput">ENOSYS</code> (<a href="https://svn.boost.org/trac/boost/ticket/7012" target="_top">#7012</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the SSL implementation to throw an exception if SSL engine initialisation
|
||
fails (<a href="https://svn.boost.org/trac/boost/ticket/6303" target="_top">#6303</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Implemented various minor performance improvements, primarily targeted
|
||
at Linux x86 and x86-64 platforms.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h23"></a>
|
||
<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
|
||
1.8.1 / Boost 1.50</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">epoll_reactor</code> backend to do lazy registration
|
||
for <code class="computeroutput">EPOLLOUT</code> events.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">epoll_reactor</code> handling of out-of-band data, which
|
||
was broken by an incomplete fix in the last release.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput">OPENSSL_NO_ENGINE</code>
|
||
feature test <code class="computeroutput">#define</code> (<a href="https://svn.boost.org/trac/boost/ticket/6432" target="_top">#6432</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed <code class="computeroutput">windows::object_handle</code> so that it works with Windows
|
||
compilers that support C++11 move semantics (such as <code class="literal">g++</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
Improved the performance of strand rescheduling.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for <code class="literal">g++</code> 4.7 when compiling in C++11 mode
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/6620" target="_top">#6620</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a problem where <code class="computeroutput">signal_set</code> handlers were not being delivered
|
||
when the <code class="computeroutput">io_service</code> was constructed with a <code class="computeroutput">concurrency_hint</code>
|
||
of 1 (<a href="https://svn.boost.org/trac/boost/ticket/6657" target="_top">#6657</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h24"></a>
|
||
<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
|
||
1.8.0 / Boost 1.49</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added a new class template <code class="computeroutput">basic_waitable_timer</code> based around
|
||
the C++11 clock type requirements. It may be used with the clocks from
|
||
the C++11 <code class="computeroutput"><chrono></code> library facility or, if those are
|
||
not available, Boost.Chrono. The typedefs <code class="computeroutput">high_resolution_timer</code>,
|
||
<code class="computeroutput">steady_timer</code> and <code class="computeroutput">system_timer</code> may be used to
|
||
create timer objects for the standard clock types.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">windows::object_handle</code> class for performing waits
|
||
on Windows kernel objects. Thanks go to Boris Schaeling for contributing
|
||
substantially to the development of this feature.
|
||
</li>
|
||
<li class="listitem">
|
||
On Linux, <code class="computeroutput">connect()</code> can return EAGAIN in certain circumstances.
|
||
Remapped this to another error so that it doesn't look like a non-blocking
|
||
operation (<a href="https://svn.boost.org/trac/boost/ticket/6048" target="_top">#6048</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error on NetBSD (<a href="https://svn.boost.org/trac/boost/ticket/6098" target="_top">#6098</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed deadlock on Mac OS X (<a href="https://svn.boost.org/trac/boost/ticket/6275" target="_top">#6275</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a non-paged pool "leak" on Windows when an <code class="computeroutput">io_service</code>
|
||
is repeatedly run without anything to do (<a href="https://svn.boost.org/trac/boost/ticket/6321" target="_top">#6321</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Reverted earlier change to allow some speculative operations to be performed
|
||
without holding the lock, as it introduced a race condition in some multithreaded
|
||
scenarios.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a bug where the second buffer in an array of two buffers may be ignored
|
||
if the first buffer is empty.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h25"></a>
|
||
<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
|
||
1.6.1 / Boost 1.48</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Implemented various performance improvements, including:
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; ">
|
||
<li class="listitem">
|
||
Using thread-local operation queues in single-threaded use cases
|
||
(i.e. when <code class="computeroutput">concurrency_hint</code> is 1) to eliminate a lock/unlock
|
||
pair.
|
||
</li>
|
||
<li class="listitem">
|
||
Allowing some <code class="computeroutput">epoll_reactor</code> speculative operations to
|
||
be performed without holding the lock.
|
||
</li>
|
||
<li class="listitem">
|
||
Improving locality of reference by performing an <code class="computeroutput">epoll_reactor</code>'s
|
||
I/O operation immediately before the corresponding handler is called.
|
||
This also improves scalability across CPUs when multiple threads
|
||
are running the <code class="computeroutput">io_service</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Specialising asynchronous read and write operations for buffer sequences
|
||
that are arrays (<code class="computeroutput">boost::array</code> or <code class="computeroutput">std::array</code>)
|
||
of exactly two buffers.
|
||
</li>
|
||
</ul></div>
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error in the regex overload of <code class="computeroutput">async_read_until</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/5688" target="_top">#5688</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific compile error by explicitly specifying the <code class="computeroutput">signal()</code>
|
||
function from the global namespace (<a href="https://svn.boost.org/trac/boost/ticket/5722" target="_top">#5722</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">deadline_timer</code> implementation so that it does
|
||
not read the clock unless the timer heap is non-empty.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the SSL stream's buffers' sizes so that they are large enough to
|
||
hold a complete TLS record (<a href="https://svn.boost.org/trac/boost/ticket/5854" target="_top">#5854</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the behaviour of the synchronous <code class="computeroutput">null_buffers</code> operations
|
||
so that they obey the user's non-blocking setting (<a href="https://svn.boost.org/trac/boost/ticket/5756" target="_top">#5756</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to set the size of the select <code class="computeroutput">fd_set</code> at runtime when
|
||
using Windows.
|
||
</li>
|
||
<li class="listitem">
|
||
Disabled an MSVC warning due to const qualifier being applied to function
|
||
type.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the initialisation of the OpenSSL library so that it supports all
|
||
available algorithms.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the SSL error mapping used when the session is gracefully shut down.
|
||
</li>
|
||
<li class="listitem">
|
||
Added some latency test programs.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an exception safety issue in <code class="computeroutput">epoll_reactor</code> initialisation
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/6006" target="_top">#6006</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Made the number of strand implementations configurable by defining <code class="computeroutput">BOOST_ASIO_STRAND_IMPLEMENTATIONS</code>
|
||
to the desired number.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for a new <code class="computeroutput">BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION</code>
|
||
flag which switches the allocation of strand implementations to use a round-robin
|
||
approach rather than hashing.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed potential strand starvation issue that can occur when <code class="computeroutput">strand.post()</code>
|
||
is used.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h26"></a>
|
||
<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
|
||
1.6.0 / Boost 1.47</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added support for signal handling, using a new class called <code class="computeroutput">signal_set</code>.
|
||
Programs may add one or more signals to the set, and then perform an <code class="computeroutput">async_wait()</code>
|
||
operation. The specified handler will be called when one of the signals
|
||
occurs. The same signal number may be registered with multiple <code class="computeroutput">signal_set</code>
|
||
objects, however the signal number must be used only with Asio. Addresses
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2879" target="_top">#2879</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added handler tracking, a new debugging aid. When enabled by defining
|
||
<code class="computeroutput">BOOST_ASIO_ENABLE_HANDLER_TRACKING</code>, Asio writes debugging
|
||
output to the standard error stream. The output records asynchronous operations
|
||
and the relationships between their handlers. It may be post-processed
|
||
using the included <code class="literal">handlerviz.pl</code> tool to create a visual
|
||
representation of the handlers (requires GraphViz).
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for timeouts on socket iostreams, such as <code class="computeroutput">ip::tcp::iostream</code>.
|
||
A timeout is set by calling <code class="computeroutput">expires_at()</code> or <code class="computeroutput">expires_from_now()</code>
|
||
to establish a deadline. Any socket operations which occur past the deadline
|
||
will put the iostream into a bad state.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">error()</code> member function to socket iostreams, for
|
||
retrieving the error code from the most recent system call.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">basic_deadline_timer::cancel_one()</code> function. This
|
||
function lets you cancel a single waiting handler on a timer. Handlers
|
||
are cancelled in FIFO order.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">transfer_exactly()</code> completion condition. This
|
||
can be used to send or receive a specified number of bytes even if the
|
||
total size of the buffer (or buffer sequence) is larger.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new free functions <code class="computeroutput">connect()</code> and <code class="computeroutput">async_connect()</code>.
|
||
These operations try each endpoint in a list until the socket is successfully
|
||
connected, and are useful for creating TCP clients that work with both
|
||
IPv4 and IPv6.
|
||
</li>
|
||
<li class="listitem">
|
||
Extended the <code class="computeroutput">buffer_size()</code> function so that it works for buffer
|
||
sequences in addition to individual buffers.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">buffer_copy()</code> function that can be used to copy
|
||
the raw bytes between individual buffers and buffer sequences.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new non-throwing overloads of <code class="computeroutput">read()</code>, <code class="computeroutput">read_at()</code>,
|
||
<code class="computeroutput">write()</code> and <code class="computeroutput">write_at()</code> that do not require a
|
||
completion condition.
|
||
</li>
|
||
<li class="listitem">
|
||
Added friendlier compiler errors for when a completion handler does not
|
||
meet the necessary type requirements. When C++0x is available (currently
|
||
supported for <code class="literal">g++</code> 4.5 or later, and MSVC 10), <code class="computeroutput">static_assert</code>
|
||
is also used to generate an informative error message. This checking may
|
||
be disabled by defining <code class="computeroutput">BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new, completely rewritten SSL implementation. The new implementation
|
||
compiles faster, shows substantially improved performance, and supports
|
||
custom memory allocation and handler invocation. It includes new API features
|
||
such as certificate verification callbacks and has improved error reporting.
|
||
The new implementation is source-compatible with the old for most uses.
|
||
However, if necessary, the old implementation may still be used by defining
|
||
<code class="computeroutput">BOOST_ASIO_ENABLE_OLD_SSL</code>. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3702" target="_top">#3702</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/3958" target="_top">#3958</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the separate compilation support such that, to use Asio's SSL capabilities,
|
||
you should also include <code class="computeroutput">boost/asio/ssl/impl/src.hpp</code> in one
|
||
source file in your program.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the SSL implementation to support build environments where SSL
|
||
v2 is explicitly disabled (<a href="https://svn.boost.org/trac/boost/ticket/5453" target="_top">#5453</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Made the <code class="computeroutput">is_loopback()</code>, <code class="computeroutput">is_unspecified()</code> and
|
||
<code class="computeroutput">is_multicast()</code> functions consistently available across the
|
||
<code class="computeroutput">ip::address</code>, <code class="computeroutput">ip::address_v4</code> and <code class="computeroutput">ip::address_v6</code>
|
||
classes (<a href="https://svn.boost.org/trac/boost/ticket/3939" target="_top">#3939</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">non_blocking()</code> functions for managing the non-blocking
|
||
behaviour of a socket or descriptor. The <code class="computeroutput">io_control()</code> commands
|
||
named <code class="computeroutput">non_blocking_io</code> are now deprecated in favour of these
|
||
new functions.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">native_non_blocking()</code> functions for managing the
|
||
non-blocking mode of the underlying socket or descriptor. These functions
|
||
are intended to allow the encapsulation of arbitrary non-blocking system
|
||
calls as asynchronous operations, in a way that is transparent to the user
|
||
of the socket object. The functions have no effect on the behaviour of
|
||
the synchronous operations of the socket or descriptor.
|
||
</li>
|
||
<li class="listitem">
|
||
Added the <code class="computeroutput">io_control()</code> member function for socket acceptors
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/3297" target="_top">#3297</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a <code class="computeroutput">release()</code> member function to posix descriptors. This
|
||
function releases ownership of the underlying native descriptor to the
|
||
caller. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3900" target="_top">#3900</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for sequenced packet sockets (<code class="computeroutput">SOCK_SEQPACKET</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a new <code class="computeroutput">io_service::stopped()</code> function that can be used
|
||
to determine whether the <code class="computeroutput">io_service</code> has stopped (i.e. a <code class="computeroutput">reset()</code>
|
||
call is needed prior to any further calls to <code class="computeroutput">run()</code>, <code class="computeroutput">run_one()</code>,
|
||
<code class="computeroutput">poll()</code> or <code class="computeroutput">poll_one()</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
For consistency with the C++0x standard library, deprecated the <code class="computeroutput">native_type</code>
|
||
typedefs in favour of <code class="computeroutput">native_handle_type</code>, and the <code class="computeroutput">native()</code>
|
||
member functions in favour of <code class="computeroutput">native_handle()</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for C++0x move construction and assignment to sockets, serial
|
||
ports, POSIX descriptors and Windows handles.
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced the copying of handler function objects.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for C++0x move construction to further reduce (and in some
|
||
cases eliminate) copying of handler objects.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for the <code class="computeroutput">fork()</code> system call. Programs that use
|
||
<code class="computeroutput">fork()</code> must call <code class="computeroutput">io_service.notify_fork()</code> at
|
||
the appropriate times. Two new examples have been added showing how to
|
||
use this feature. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3238" target="_top">#3238</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/4162" target="_top">#4162</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Cleaned up the handling of errors reported by the <code class="computeroutput">close()</code>
|
||
system call. In particular, assume that most operating systems won't have
|
||
<code class="computeroutput">close()</code> fail with <code class="computeroutput">EWOULDBLOCK</code>, but if it does
|
||
then set the blocking mode and restart the call. If any other error occurs,
|
||
assume the descriptor is closed. Addresses <a href="https://svn.boost.org/trac/boost/ticket/3307" target="_top">#3307</a>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">asio::buffer()</code> overloads for <code class="computeroutput">std::array</code>,
|
||
when available.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the implementation to use the C++0x standard library templates
|
||
<code class="computeroutput">array</code>, <code class="computeroutput">shared_ptr</code>, <code class="computeroutput">weak_ptr</code> and
|
||
<code class="computeroutput">atomic</code> when they are available, rather than the Boost equivalents.
|
||
</li>
|
||
<li class="listitem">
|
||
Use C++0x variadic templates when available, rather than generating function
|
||
overloads using Boost.Preprocessor.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed exception reporting to include the function name in exception
|
||
<code class="computeroutput">what()</code> messages.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed insufficient initialisers warning with MinGW.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">shutdown_service()</code> member functions to be private.
|
||
</li>
|
||
<li class="listitem">
|
||
Added archetypes for testing socket option functions.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the Boost.Asio examples so that they don't use Boost.Thread's convenience
|
||
header. Use the header file that is specifically for the boost::thread
|
||
class instead.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed the dependency on OS-provided macros for the well-known IPv4 and
|
||
IPv6 addresses. This should eliminate annoying "missing braces around
|
||
initializer" warnings (<a href="https://svn.boost.org/trac/boost/ticket/3741" target="_top">#3741</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced the size of <code class="computeroutput">ip::basic_endpoint<></code> objects (such
|
||
as <code class="computeroutput">ip::tcp::endpoint</code> and <code class="computeroutput">ip::udp::endpoint</code>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the reactor backends to assume that any descriptors or sockets
|
||
added using <code class="computeroutput">assign()</code> may have been <code class="computeroutput">dup()</code>-ed,
|
||
and so require explicit deregistration from the reactor (<a href="https://svn.boost.org/trac/boost/ticket/4971" target="_top">#4971</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Removed the deprecated member functions named <code class="computeroutput">io_service()</code>.
|
||
The <code class="computeroutput">get_io_service()</code> member functions should be used instead.
|
||
</li>
|
||
<li class="listitem">
|
||
Removed the deprecated typedefs <code class="computeroutput">resolver_query</code> and <code class="computeroutput">resolver_iterator</code>
|
||
from the <code class="computeroutput">ip::tcp</code>, <code class="computeroutput">ip::udp</code> and <code class="computeroutput">ip::icmp</code>
|
||
classes.
|
||
</li>
|
||
<li class="listitem">
|
||
Modified the <code class="computeroutput">buffers_iterator<></code> and <code class="computeroutput">ip::basic_resolver_iterator</code>
|
||
classes so that the value_type typedefs are non-const byte types.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed warnings reported by g++'s <code class="literal">-Wshadow</code> compiler option
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/3905" target="_top">#3905</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added an explicit cast to convert the <code class="computeroutput">FIONBIO</code> constant to
|
||
int, to suppress a compiler warning on some platforms (<a href="https://svn.boost.org/trac/boost/ticket/5128" target="_top">#5128</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed most examples to treat a failure by an accept operation as non-fatal
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/5124" target="_top">#5124</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed an error in the <code class="literal">tick_count_timer</code> example by making
|
||
the duration type signed. Previously, a wait on an already-passed deadline
|
||
would not return for a very long time (<a href="https://svn.boost.org/trac/boost/ticket/5418" target="_top">#5418</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h27"></a>
|
||
<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
|
||
1.4.9 / Boost 1.46.1</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
<code class="computeroutput">EV_ONESHOT</code> seems to cause problems on some versions of Mac
|
||
OS X, with the <code class="computeroutput">io_service</code> destructor getting stuck inside
|
||
the <code class="computeroutput">close()</code> system call. Changed the kqueue backend to use
|
||
<code class="computeroutput">EV_CLEAR</code> instead (<a href="https://svn.boost.org/trac/boost/ticket/5021" target="_top">#5021</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed compile failures with some versions of <code class="literal">g++</code> due
|
||
to the use of anonymous enums (<a href="https://svn.boost.org/trac/boost/ticket/4883" target="_top">#4883</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a bug on kqueue-based platforms, where some system calls that repeatedly
|
||
fail with <code class="computeroutput">EWOULDBLOCK</code> are not correctly re-registered with
|
||
kqueue.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed <code class="computeroutput">asio::streambuf</code> to ensure that its internal pointers
|
||
are updated correctly after the data has been modified using <code class="computeroutput">std::streambuf</code>
|
||
member functions.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a bug that prevented the linger socket option from working on platforms
|
||
other than Windows.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h28"></a>
|
||
<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
|
||
1.4.8 / Boost 1.46</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed an integer overflow problem that occurs when <code class="computeroutput">ip::address_v4::broadcast()</code>
|
||
is used on 64-bit platforms.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a problem on older Linux kernels (where epoll is used without timerfd
|
||
support) that prevents timely delivery of deadline_timer handlers, after
|
||
the program has been running for some time (<a href="https://svn.boost.org/trac/boost/ticket/5045" target="_top">#5045</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h29"></a>
|
||
<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
|
||
1.4.7 / Boost 1.45</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Fixed a problem on kqueue-based platforms where a <code class="computeroutput">deadline_timer</code>
|
||
may never fire if the <code class="computeroutput">io_service</code> is running in a background
|
||
thread (<a href="https://svn.boost.org/trac/boost/ticket/4568" target="_top">#4568</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a const-correctness issue that prevented valid uses of <code class="computeroutput">has_service<></code>
|
||
from compiling (<a href="https://svn.boost.org/trac/boost/ticket/4638" target="_top">#4638</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed MinGW cross-compilation (<a href="https://svn.boost.org/trac/boost/ticket/4491" target="_top">#4491</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Removed dependency on deprecated Boost.System functions (<a href="https://svn.boost.org/trac/boost/ticket/4672" target="_top">#4672</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured <code class="computeroutput">close()</code>/<code class="computeroutput">closesocket()</code> failures are correctly
|
||
propagated (<a href="https://svn.boost.org/trac/boost/ticket/4573" target="_top">#4573</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a check for errors returned by <code class="computeroutput">InitializeCriticalSectionAndSpinCount</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/4574" target="_top">#4574</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for hardware flow control on QNX (<a href="https://svn.boost.org/trac/boost/ticket/4625" target="_top">#4625</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured handler arguments are passed as lvalues (<a href="https://svn.boost.org/trac/boost/ticket/4744" target="_top">#4744</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed Windows build when thread support is disabled (<a href="https://svn.boost.org/trac/boost/ticket/4680" target="_top">#4680</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific problem where <code class="computeroutput">deadline_timer</code> objects
|
||
with expiry times set more than 5 minutes in the future may never expire
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/4745" target="_top">#4745</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the <code class="computeroutput">resolver</code> backend on BSD platforms so that an empty
|
||
service name resolves to port number <code class="computeroutput">0</code>, as per the documentation
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/4690" target="_top">#4690</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed read operations so that they do not accept buffer sequences of type
|
||
<code class="computeroutput">const_buffers_1</code> (<a href="https://svn.boost.org/trac/boost/ticket/4746" target="_top">#4746</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Redefined <code class="computeroutput">Protocol</code> and <code class="computeroutput">id</code> to avoid clashing with
|
||
Objective-C++ keywords (<a href="https://svn.boost.org/trac/boost/ticket/4191" target="_top">#4191</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a <code class="computeroutput">vector</code> reallocation performance issue that can occur
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the kqueue backend so that it compiles on NetBSD (<a href="https://svn.boost.org/trac/boost/ticket/4662" target="_top">#4662</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed the socket <code class="computeroutput">io_control()</code> implementation on 64-bit Mac
|
||
OS X and BSD platforms (<a href="https://svn.boost.org/trac/boost/ticket/4782" target="_top">#4782</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a Windows-specific problem where failures from <code class="computeroutput">accept()</code>
|
||
are incorrectly treated as successes (<a href="https://svn.boost.org/trac/boost/ticket/4859" target="_top">#4859</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Deprecated the separate compilation header <code class="computeroutput"><boost/asio/impl/src.cpp></code>
|
||
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>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h30"></a>
|
||
<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
|
||
1.4.6 / Boost 1.44</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Reduced compile times. (Note that some programs may need to add additional
|
||
<code class="computeroutput">#include</code>s, e.g. if the program uses <code class="computeroutput">boost::array</code>
|
||
but does not explicitly include <code class="computeroutput"><boost/array.hpp></code>.)
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced the size of generated code.
|
||
</li>
|
||
<li class="listitem">
|
||
Refactored <code class="computeroutput">deadline_timer</code> implementation to improve performance.
|
||
</li>
|
||
<li class="listitem">
|
||
Improved multiprocessor scalability on Windows by using a dedicated hidden
|
||
thread to wait for timers.
|
||
</li>
|
||
<li class="listitem">
|
||
Improved performance of <code class="computeroutput">asio::streambuf</code> with <code class="computeroutput">async_read()</code>
|
||
and <code class="computeroutput">async_read_until()</code>. These read operations now use the
|
||
existing capacity of the <code class="computeroutput">streambuf</code> when reading, rather than
|
||
limiting the read to 512 bytes.
|
||
</li>
|
||
<li class="listitem">
|
||
Added optional separate compilation. To enable, add <code class="computeroutput">#include <boost/asio/impl/src.cpp></code>
|
||
to one source file in a program, then build the program with <code class="computeroutput">BOOST_ASIO_SEPARATE_COMPILATION</code>
|
||
defined in the project/compiler settings. Alternatively, <code class="computeroutput">BOOST_ASIO_DYN_LINK</code>
|
||
may be defined to build a separately-compiled Asio as part of a shared
|
||
library.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new macro <code class="computeroutput">BOOST_ASIO_DISABLE_FENCED_BLOCK</code> to permit
|
||
the disabling of memory fences around completion handlers, even if thread
|
||
support is enabled.
|
||
</li>
|
||
<li class="listitem">
|
||
Reworked timeout examples to better illustrate typical use cases.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that handler arguments are passed as <code class="computeroutput">const</code> types.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed incorrect parameter order in <code class="computeroutput">null_buffers</code> variant of
|
||
<code class="computeroutput">async_send_to</code> (<a href="https://svn.boost.org/trac/boost/ticket/4170" target="_top">#4170</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured <code class="computeroutput">unsigned char</code> is used with <code class="computeroutput">isdigit</code> in
|
||
<code class="computeroutput">getaddrinfo</code> emulation (<a href="https://svn.boost.org/trac/boost/ticket/4201" target="_top">#4201</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed handling of very small but non-zero timeouts (<a href="https://svn.boost.org/trac/boost/ticket/4205" target="_top">#4205</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed crash that occurred when an empty buffer sequence was passed to a
|
||
composed read or write operation.
|
||
</li>
|
||
<li class="listitem">
|
||
Added missing <code class="computeroutput">operator+</code> overload in <code class="computeroutput">buffers_iterator</code>
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/4382" target="_top">#4382</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Implemented cancellation of <code class="computeroutput">null_buffers</code> operations on Windows.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h31"></a>
|
||
<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
|
||
1.4.5 / Boost 1.43</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Improved performance.
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced compile times.
|
||
</li>
|
||
<li class="listitem">
|
||
Reduced the size of generated code.
|
||
</li>
|
||
<li class="listitem">
|
||
Extended the guarantee that background threads don't call user code to
|
||
all asynchronous operations (<a href="https://svn.boost.org/trac/boost/ticket/3923" target="_top">#3923</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use edge-triggered epoll on Linux.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use <code class="computeroutput">timerfd</code> for dispatching timers on Linux, when
|
||
available.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed to use one-shot notifications with kqueue on Mac OS X and BSD platforms.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a bitmask type <code class="computeroutput">ip::resolver_query_base::flags</code> as per
|
||
the TR2 proposal. This type prevents implicit conversion from <code class="computeroutput">int</code>
|
||
to <code class="computeroutput">flags</code>, allowing the compiler to catch cases where users
|
||
incorrectly pass a numeric port number as the service name.
|
||
</li>
|
||
<li class="listitem">
|
||
Added <code class="computeroutput">#define NOMINMAX</code> for all Windows compilers. Users can
|
||
define <code class="computeroutput">BOOST_ASIO_NO_NOMINMAX</code> to suppress this definition
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/3901" target="_top">#3901</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a bug where 0-byte asynchronous reads were incorrectly passing an
|
||
<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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">io_control()</code> member functions to always call
|
||
<code class="computeroutput">ioctl</code> on the underlying descriptor when modifying blocking
|
||
mode (<a href="https://svn.boost.org/trac/boost/ticket/3307" target="_top">#3307</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the resolver implementation to longer require the typedefs <code class="computeroutput">InternetProtocol::resolver_query</code>
|
||
and <code class="computeroutput">InternetProtocol::resolver_iterator</code>, as neither typedef
|
||
is part of the documented <code class="computeroutput">InternetProtocol</code> requirements. The
|
||
corresponding typedefs in the <code class="computeroutput">ip::tcp</code>, <code class="computeroutput">ip::udp</code>
|
||
and <code class="computeroutput">ip::icmp</code> classes have been deprecated.
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed out-of-band handling for reactors not based on <code class="computeroutput">select()</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">BOOST_ASIO_DISABLE_THREADS</code> macro that allows Asio's
|
||
threading support to be independently disabled.
|
||
</li>
|
||
<li class="listitem">
|
||
Minor documentation improvements.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h32"></a>
|
||
<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
|
||
1.4.4 / Boost 1.42</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added a new HTTP Server 4 example illustrating the use of stackless coroutines
|
||
with Asio.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed handler allocation and invocation to use <code class="computeroutput">boost::addressof</code>
|
||
to get the address of handler objects, rather than applying <code class="computeroutput">operator&</code>
|
||
directly (<a href="https://svn.boost.org/trac/boost/ticket/2977" target="_top">#2977</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Restricted MSVC buffer debugging workaround to 2008, as it causes a crash
|
||
with 2010 beta 2 (<a href="https://svn.boost.org/trac/boost/ticket/3796" target="_top">#3796</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/3822" target="_top">#3822</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a problem with the lifetime of handler memory, where Windows needs
|
||
the <code class="computeroutput">OVERLAPPED</code> structure to be valid until both the initiating
|
||
function call has returned and the completion packet has been delivered.
|
||
</li>
|
||
<li class="listitem">
|
||
Don't block signals while performing system calls, but instead restart
|
||
the calls if they are interrupted.
|
||
</li>
|
||
<li class="listitem">
|
||
Documented the guarantee made by strand objects with respect to order of
|
||
handler invocation.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed strands to use a pool of implementations, to make copying of strands
|
||
cheaper.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured that kqueue support is enabled for BSD platforms (<a href="https://svn.boost.org/trac/boost/ticket/3626" target="_top">#3626</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added a <code class="computeroutput">boost_</code> prefix to the <code class="computeroutput">extern "C"</code>
|
||
thread entry point function (<a href="https://svn.boost.org/trac/boost/ticket/3809" target="_top">#3809</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
In <code class="computeroutput">getaddrinfo</code> emulation, only check the socket type (<code class="computeroutput">SOCK_STREAM</code>
|
||
or <code class="computeroutput">SOCK_DGRAM</code>) if a service name has been specified. This
|
||
should allow the emulation to work with raw sockets.
|
||
</li>
|
||
<li class="listitem">
|
||
Added a workaround for some broken Windows firewalls that make a socket
|
||
appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.
|
||
</li>
|
||
<li class="listitem">
|
||
Applied a fix for reported excessive CPU usage under Solaris (<a href="https://svn.boost.org/trac/boost/ticket/3670" target="_top">#3670</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Added some support for platforms that use older compilers such as g++ 2.95
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/3743" target="_top">#3743</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h33"></a>
|
||
<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
|
||
1.4.3 / Boost 1.40</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added a new ping example to illustrate the use of ICMP sockets.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed the <code class="computeroutput">buffered*_stream<></code> templates to treat 0-byte
|
||
reads and writes as no-ops, to comply with the documented type requirements
|
||
for <code class="computeroutput">SyncReadStream</code>, <code class="computeroutput">AsyncReadStream</code>, <code class="computeroutput">SyncWriteStream</code>
|
||
and <code class="computeroutput">AsyncWriteStream</code>.
|
||
</li>
|
||
<li class="listitem">
|
||
Changed some instances of the <code class="computeroutput">throw</code> keyword to <code class="computeroutput">boost::throw_exception()</code>
|
||
to allow Asio to be used when exception support is disabled. Note that
|
||
the SSL wrappers still require exception support (<a href="https://svn.boost.org/trac/boost/ticket/2754" target="_top">#2754</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Made Asio compatible with the OpenSSL 1.0 beta (<a href="https://svn.boost.org/trac/boost/ticket/3256" target="_top">#3256</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Eliminated a redundant system call in the Solaris <code class="literal">/dev/poll</code>
|
||
backend.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured correct propagation of the error code when a synchronous accept
|
||
fails (<a href="https://svn.boost.org/trac/boost/ticket/3216" target="_top">#3216</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured correct propagation of the error code when a synchronous read or
|
||
write on a Windows HANDLE fails.
|
||
</li>
|
||
<li class="listitem">
|
||
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>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed custom memory allocation support for timers (<a href="https://svn.boost.org/trac/boost/ticket/3107" target="_top">#3107</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Tidied up various warnings reported by g++ (<a href="https://svn.boost.org/trac/boost/ticket/1341" target="_top">#1341</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2618" target="_top">#2618</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Various documentation improvements, including more obvious hyperlinks to
|
||
function overloads, header file information, examples for the handler type
|
||
requirements, and adding enum values to the index (<a href="https://svn.boost.org/trac/boost/ticket/3157" target="_top">#3157</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2620" target="_top">#2620</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h34"></a>
|
||
<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
|
||
1.4.2 / Boost 1.39</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Implement automatic resizing of the bucket array in the internal hash maps.
|
||
This is to improve performance for very large numbers of asynchronous operations
|
||
and also to reduce memory usage for very small numbers. A new macro <code class="computeroutput">BOOST_ASIO_HASH_MAP_BUCKETS</code>
|
||
may be used to tweak the sizes used for the bucket arrays. (N.B. this feature
|
||
introduced a bug which was fixed in Asio 1.4.3 / Boost 1.40.)
|
||
</li>
|
||
<li class="listitem">
|
||
Add performance optimisation for the Windows IOCP backend for when no timers
|
||
are used.
|
||
</li>
|
||
<li class="listitem">
|
||
Prevent locale settings from affecting formatting of TCP and UDP endpoints
|
||
(<a href="https://svn.boost.org/trac/boost/ticket/2682" target="_top">#2682</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fix a memory leak that occurred when an asynchronous SSL operation's completion
|
||
handler threw an exception (<a href="https://svn.boost.org/trac/boost/ticket/2910" target="_top">#2910</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fix the implementation of <code class="computeroutput">io_control()</code> so that it adheres
|
||
to the documented type requirements for IoControlCommand (<a href="https://svn.boost.org/trac/boost/ticket/2820" target="_top">#2820</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fix incompatibility between Asio and ncurses.h (<a href="https://svn.boost.org/trac/boost/ticket/2156" target="_top">#2156</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
On Windows, specifically handle the case when an overlapped <code class="computeroutput">ReadFile</code>
|
||
call fails with <code class="computeroutput">ERROR_MORE_DATA</code>. This enables a hack where
|
||
a <code class="computeroutput">windows::stream_handle</code> can be used with a message-oriented
|
||
named pipe (<a href="https://svn.boost.org/trac/boost/ticket/2936" target="_top">#2936</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fix system call wrappers to always clear the error on success, as POSIX
|
||
allows successful system calls to modify errno (<a href="https://svn.boost.org/trac/boost/ticket/2953" target="_top">#2953</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Don't include termios.h if <code class="computeroutput">BOOST_ASIO_DISABLE_SERIAL_PORT</code>
|
||
is defined (<a href="https://svn.boost.org/trac/boost/ticket/2917" target="_top">#2917</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Cleaned up some more MSVC level 4 warnings (<a href="https://svn.boost.org/trac/boost/ticket/2828" target="_top">#2828</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Various documentation fixes (<a href="https://svn.boost.org/trac/boost/ticket/2871" target="_top">#2871</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h35"></a>
|
||
<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
|
||
1.4.1 / Boost 1.38</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Improved compatibility with some Windows firewall software.
|
||
</li>
|
||
<li class="listitem">
|
||
Ensured arguments to <code class="computeroutput">windows::overlapped_ptr::complete()</code> are
|
||
correctly passed to the completion handler (<a href="https://svn.boost.org/trac/boost/ticket/2614" target="_top">#2614</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a link problem and multicast failure on QNX (<a href="https://svn.boost.org/trac/boost/ticket/2504" target="_top">#2504</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2530" target="_top">#2530</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Fixed a compile error in SSL support on MinGW / g++ 3.4.5.
|
||
</li>
|
||
<li class="listitem">
|
||
Drop back to using a pipe for notification if eventfd is not available
|
||
at runtime on Linux (<a href="https://svn.boost.org/trac/boost/ticket/2683" target="_top">#2683</a>).
|
||
</li>
|
||
<li class="listitem">
|
||
Various minor bug and documentation fixes (<a href="https://svn.boost.org/trac/boost/ticket/2534" target="_top">#2534</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2541" target="_top">#2541</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2607" target="_top">#2607</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2617" target="_top">#2617</a>,
|
||
<a href="https://svn.boost.org/trac/boost/ticket/2619" target="_top">#2619</a>).
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h36"></a>
|
||
<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
|
||
1.4.0 / Boost 1.37</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Enhanced CompletionCondition concept with the signature <code class="computeroutput">size_t CompletionCondition(error_code
|
||
ec, size_t total)</code>, where the return value indicates the maximum
|
||
number of bytes to be transferred on the next read or write operation.
|
||
(The old CompletionCondition signature is still supported for backwards
|
||
compatibility).
|
||
</li>
|
||
<li class="listitem">
|
||
New windows::overlapped_ptr class to allow arbitrary overlapped I/O functions
|
||
(such as TransmitFile) to be used with Asio.
|
||
</li>
|
||
<li class="listitem">
|
||
On recent versions of Linux, an eventfd descriptor is now used (rather
|
||
than a pipe) to interrupt a blocked select/epoll reactor.
|
||
</li>
|
||
<li class="listitem">
|
||
Added const overloads of lowest_layer().
|
||
</li>
|
||
<li class="listitem">
|
||
Synchronous read, write, accept and connect operations are now thread safe
|
||
(meaning that it is now permitted to perform concurrent synchronous operations
|
||
on an individual socket, if supported by the OS).
|
||
</li>
|
||
<li class="listitem">
|
||
Reactor-based io_service implementations now use lazy initialisation to
|
||
reduce the memory usage of an io_service object used only as a message
|
||
queue.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h37"></a>
|
||
<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
|
||
1.2.0 / Boost 1.36</a>
|
||
</h4>
|
||
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
|
||
<li class="listitem">
|
||
Added support for serial ports.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for UNIX domain sockets.
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for raw sockets and ICMP.
|
||
</li>
|
||
<li class="listitem">
|
||
Added wrappers for POSIX stream-oriented file descriptors (excluding regular
|
||
files).
|
||
</li>
|
||
<li class="listitem">
|
||
Added wrappers for Windows stream-oriented <code class="computeroutput">HANDLE</code>s such as
|
||
named pipes (requires <code class="computeroutput">HANDLE</code>s that work with I/O completion
|
||
ports).
|
||
</li>
|
||
<li class="listitem">
|
||
Added wrappers for Windows random-access <code class="computeroutput">HANDLE</code>s such as files
|
||
(requires <code class="computeroutput">HANDLE</code>s that work with I/O completion ports).
|
||
</li>
|
||
<li class="listitem">
|
||
Added support for reactor-style operations (i.e. they report readiness
|
||
but perform no I/O) using a new <code class="computeroutput">null_buffers</code> type.
|
||
</li>
|
||
<li class="listitem">
|
||
Added an iterator type for bytewise traversal of buffer sequences.
|
||
</li>
|
||
<li class="listitem">
|
||
Added new <code class="computeroutput">read_until()</code> and <code class="computeroutput">async_read_until()</code>
|
||
overloads that take a user-defined function object for locating message
|
||
boundaries.
|
||
</li>
|
||
<li class="listitem">
|
||
Added an experimental two-lock queue (enabled by defining <code class="computeroutput">BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE</code>)
|
||
that may provide better <code class="computeroutput">io_service</code> scalability across many
|
||
processors.
|
||
</li>
|
||
<li class="listitem">
|
||
Various fixes, performance improvements, and more complete coverage of
|
||
the custom memory allocation support.
|
||
</li>
|
||
</ul></div>
|
||
<h4>
|
||
<a name="boost_asio.history.h38"></a>
|
||
<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
|
||
1.0.0 / Boost 1.35</a>
|
||
</h4>
|
||
<p>
|
||
First release of Asio as part of Boost.
|
||
</p>
|
||
</div>
|
||
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
|
||
<td align="left"></td>
|
||
<td align="right"><div class="copyright-footer">Copyright © 2003-2021 Christopher
|
||
M. Kohlhoff<p>
|
||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||
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>)
|
||
</p>
|
||
</div></td>
|
||
</tr></table>
|
||
<hr>
|
||
<div class="spirit-nav">
|
||
<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>
|
||
</div>
|
||
</body>
|
||
</html>
|