Coroutine implementations can be included from multiple translation
units in a different order. When __COUNTER__ is used (for MSVC), this
means that the values yielded by __COUNTER__ for a particular coroutine
can differ between TUs.
When opening asio::stream_file or asio::random_access_file on Windows,
the path is now converted to a wide character string, and the file is
opened using CreateFileW.
The parallel_group and make_parallel_group implementations satisfy the
asynchronous operation requirements by delegating to the supplied
operations. It is not possible for them to do this when the supplied set
is empty.
The previous workaround for _FORTIFY_SOURCE warnings increased the size
of all IP endpoint objects. Instead, try fixing the warning at the point
where it occurs, by limiting the length memcpy-ed while processing the
addrinfo results from getaddrinfo.
This eliminates a warning from some compilers that the deprecated
annotation is a C++14 extension. An alternative implementation of
the annotation is now always used when using MSVC.
Add a new configuration option "reactor" / "use_eventfd" that is used by
the epoll_reactor. When true (the default), the reactor uses an eventfd
as its select_interrupter implementation. When false, a pipe is used
instead.
Add a new configuration option "reactor" / "use_timerfd" that is used by
the epoll_reactor. When true (the default), the reactor uses a timerfd
descriptor to manage timeouts. When false, the duration until the next
timeout is computed and passed as a timeout to epoll_wait.
Add a new configuration option "reactor" / "reset_edge_on_partial_read"
that is used by the epoll_reactor. When true, it indicates that a partial
read should be considered to have consumed the edge. The default value of
false corresponds to the existing behaviour, where the edge is only
treated as consumed when the read fails with EAGAIN.