diff options
Diffstat (limited to '3rdparty/asio/src/doc/history.qbk')
-rw-r--r-- | 3rdparty/asio/src/doc/history.qbk | 1214 |
1 files changed, 0 insertions, 1214 deletions
diff --git a/3rdparty/asio/src/doc/history.qbk b/3rdparty/asio/src/doc/history.qbk deleted file mode 100644 index e5c3ddbeb80..00000000000 --- a/3rdparty/asio/src/doc/history.qbk +++ /dev/null @@ -1,1214 +0,0 @@ -[/ - / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) - / - / Distributed under the Boost Software License, Version 1.0. (See accompanying - / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - /] - -[section:history Revision History] - -[heading Asio 1.11.0] - -* Implemented changes to substantially reflect the Networking Library Proposal - ([@www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4370.html N4370]). - - * New `Executor` type requirements and classes to support an executor - framework, including the `execution_context` base class, the - `executor_work` class for tracking outstanding work, and the `executor` - polymorphic wrapper. Free functions `dispatch()`, `post()` and `defer()` - have been added and are used to submit function objects to executors. - - * Completion handlers now have an associated executor and associated - allocator. The free function `wrap()` is used to associate an executor with - a handler or other object. The handler hooks for allocation, invocation and - continuation have been deprecated. - - * A `system_executor` class has been added as a default executor. - - * The `io_service` class is now derived from `execution_context` and - implements the executor type requirements in its nested `executor_type` - class. The member functions `dispatch()`, `post()`, `defer()` and `wrap()` - have been deprecated. The `io_service::work` class has been deprecated. - - * The `io_service` member function `reset()` has been renamed to `restart()`. - The old name is retained for backward compatibility but has been - deprecated. - - * The `make_service<>()` function is now used to add a new service to an - execution context such as an `io_service`. The `add_service()` function has - been deprecated. - - * A new `strand<>` template has been added to allow strand functionality to - be used with generic executor types. - - * I/O objects (such as sockets and timers) now provide access to their - associated `io_service` via a `context()` member function. The - `get_io_service()` member function is deprecated. - - * All asynchronous operations and executor operations now support move-only - handlers. However, the deprecated `io_service::post()`, - `io_service::dispatch()`, `io_service::strand::post()` and - `io_service::strand::dispatch()` functions still require copyable handlers. - - * Waitable timer objects are now movable. - - * Waitable timers, socket iostreams and socket streambufs now provide an - `expiry()` member function for obtaining the expiry time. The accessors - `expires_at()` and `expires_after()` have been deprecated, though those - names are retained for the mutating members. - - * The `std::packaged_task` class template is now supported as a completion - handler. The initiating operation automatically returns the future - associated with the task. The `package()` function has been added as a - convenient factory for packaged tasks. - - * Sockets, socket acceptors and descriptors now provide `wait()` and - `async_wait()` operations that may be used to wait for readiness. The - `null_buffers` type has been deprecated. - - * The proposed error code enum classes are simulated using namespaces. - Existing asio error codes now have a correspondence with the standard error - conditions. - - * Conversion between IP address types, and conversion from string to address, - is now supported via the `address_cast<>()`, `make_address()`, - `make_address_v4()` and `make_address_v6()` free functions. The - `from_string()`, `to_v4()`, `to_v6()` and `v4_mapped()` member functions - have been deprecated. - - * A default-constructed `ip::address` now represents an invalid address value - that is neither IPv4 nor IPv6. - - * New `buffer()` overloads that generate mutable buffers for non-const - `string` objects. - - * Support for dynamic buffer sequences that automatically grow and shrink to - accomodate data as it is read or written. This is a generic facility - similar to the existing `asio::streambuf` class. This support includes: - - * New `dynamic_string_buffer` and `dynamic_vector_buffer` adapter classes - that meet the `DynamicBufferSequence` type requirements. - - * New `dynamic_buffer()` factory functions for creating a dynamic buffer - adapter for a `vector` or `string`. - - * New overloads for the `read()`, `async_read()`, `write()` and - `async_write()`, `read_until()` and `async_read_until()` free functions - that directly support dynamic buffer sequences. - - * Support for networks and address ranges. Thanks go to Oliver Kowalke for - contributing to the design and providing the implementation on which this - facility is based. The following new classes have been added: - - * `address_iterator_v4` for iterating across IPv4 addresses - * `address_iterator_v6` for iterating across IPv6 addresses - * `address_range_v4` to represent a range of IPv4 addresses - * `address_range_v6` to represent a range of IPv6 addresses - * `network_v4` for manipulating IPv4 CIDR addresses, e.g. 1.2.3.0/24 - * `network_v6` for manipulating IPv6 CIDR addresses, e.g. ffe0:/120 - - * New convenience headers in [^<asio/ts/*.hpp>] that correspond to the headers - in the proposal. - -* Added a new, executor-aware `thread_pool` class. - -* Changed `spawn()` to be executor-aware. - -* Added a new `spawn()` overload that takes only a function object. - -* Changed `spawn()` and `yield_context` to permit nested calls to the - completion handler. - -* Removed previously deprecated functions. - -* Added options for disabling TLS v1.1 and v1.2. - -* Changed the SSL wrapper to call the password callback when loading an - in-memory key. - -* Changed the tutorial to use `std::endl` to ensure output is flushed. - -* Fixed false SSL error reports by ensuring that the SSL error queue is cleared - prior to each operation. - -* Fixed an `ssl::stream<>` bug that may result in spurious 'short read' errors. - -* Enabled perfect forwarding for the first `ssl::stream<>` constructor argument. - -* Added standalone Asio support for Clang when used with libstdc++ and C++11. - -* Fixed an unsigned integer overflow reported by Clang's integer sanitizer. - -* Added support for move-only return types when using a `yield_context` object - with asynchronous operations. - -* Ensured errors generated by Windows' `ConnectEx` function are mapped to their - portable equivalents. - -* Changed multicast test to treat certain `join_group` failures as non-fatal. - -[heading Asio 1.10.5] - -* Fixed the [^kqueue] reactor so that it works on FreeBSD. - -* Fixed an issue in the [^kqueue] reactor which resulted in spinning when using - serial ports on Mac OS. - -* Fixed [^kqueue] reactor support for read-only file descriptors. - -* Fixed a compile error when using the [^/dev/poll] reactor. - -* Changed the Windows backend to use `WSASocketW`, as `WSASocketA` has been - deprecated. - -* Fixed some warnings reported by Visual C++ 2013. - -* Fixed integer type used in the WinRT version of the byte-order conversion - functions. - -* Changed documentation to indicate that `use_future` and `spawn()` are not - made available when including the `asio.hpp` convenience header. - -* Explicitly marked `asio::strand` as deprecated. Use - `asio::io_service::strand` instead. - -[heading Asio 1.10.4] - -* Stopped using certain Winsock functions that are marked as deprecated in the - latest Visual C++ and Windows SDK. - -* Fixed a shadow variable warning on Windows. - -* Fixed a regression in the [^kqueue] backend that was introduced in Asio - 1.10.2. - -* Added a workaround for building the unit tests with [^gcc] on AIX. - -[heading Asio 1.10.3] - -* Worked around a [^gcc] problem to do with anonymous enums. - -* Reverted the Windows `HANDLE` backend change to ignore `ERROR_MORE_DATA`. - Instead, the error will be propagated as with any other (i.e. in an - `error_code` or thrown as a `system_error`), and the number of bytes - transferred will be returned. For code that needs to handle partial messages, - the `error_code` overload should be used. - -* Fixed an off-by-one error in the `signal_set` implementation's signal - number check. - -* Changed the Windows IOCP backend to not assume that - `SO_UPDATE_CONNECT_CONTEXT` is defined. - -* Fixed a Windows-specific issue, introduced in Asio 1.10.2, by using - `VerifyVersionInfo` rather than `GetVersionEx`, as `GetVersionEx` has been - deprecated. - -* Changed to use SSE2 intrinsics rather than inline assembly, to allow the - Cray compiler to work. - -[heading Asio 1.10.2] - -* Fixed `asio::spawn()` to work correctly with new Boost.Coroutine interface. - -* Ensured that incomplete `asio::spawn()` coroutines are correctly unwound when - cleaned up by the `io_service` destructor. - -* Fixed delegation of continuation hook for handlers produced by - `io_service::wrap()` and `strand::wrap()`. - -* Changed the Windows I/O completion port backend to use `ConnectEx`, if - available, for connection-oriented IP sockets. - -* Changed the `io_service` backend for non-Windows (and non-IOCP Windows) - platforms to use a single condition variable per `io_service` instance. - This addresses a potential race condition when `run_one()` is used from - multiple threads. - -* Prevented integer overflow when computing timeouts based on some - `boost::chrono` and `std::chrono` clocks. - -* Made further changes to `EV_CLEAR` handling in the kqueue backend, to address - other cases where the `close()` system call may hang on Mac OS X. - -* Fixed infinite recursion in implementation of - `resolver_query_base::flags::operator~`. - -* Made the `select` reactor more efficient on Windows for large numbers of - sockets. - -* Fixed a Windows-specific type-aliasing issue reported by [^gcc]. - -* Prevented execution of compile-time-only buffer test to avoid triggering an - address sanitiser warning. - -* Disabled the `GetQueuedCompletionStatus` timeout workaround on recent - versions of Windows. - -* Changed implementation for Windows Runtime to use `FormatMessageW` rather - than `FormatMessageA`, as the Windows store does not permit the latter. - -* Added support for string-based scope IDs when using link-local multicast - addresses. - -* Changed IPv6 multicast group join to use the address's scope ID as the - interface, if an interface is not explicitly specified. - -* Fixed multicast test failure on Mac OS X and the BSDs by using a link-local - multicast address. - -* Various minor documentation improvements. - -[heading Asio 1.10.1] - -* 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: - - * The core facilities such as the `io_service`, `strand`, buffers, composed - operations, timers, etc., should all work as normal. - - * For sockets, only client-side TCP is supported. - - * Explicit binding of a client-side TCP socket is not supported. - - * The `cancel()` function is not supported for sockets. Asynchronous - operations may only be cancelled by closing the socket. - - * Operations that use `null_buffers` are not supported. - - * Only `tcp::no_delay` and `socket_base::keep_alive` options are supported. - - * Resolvers do not support service names, only numbers. I.e. you must - use "80" rather than "http". - - * Most resolver query flags have no effect. - -* Extended the ability to use Asio without Boost to include Microsoft Visual - Studio 2012. When using a C++11 compiler, most of Asio may now be used - without a dependency on Boost header files or libraries. To use Asio in this - way, define `ASIO_STANDALONE` on your compiler command line or as part of the - project options. This standalone configuration has been tested for the - following platforms and compilers: - - * Microsoft Visual Studio 2012 - - * Linux with g++ 4.7 or 4.8 (requires [^-std=c++11]) - - * Mac OS X with clang++ / Xcode 4.6 (requires [^-std=c++11 -stdlib=libc++]) - -* Fixed a regression (introduced in 1.10.0) where, on some platforms, errors - from `async_connect` were not correctly propagated through to the completion - handler. - -* Fixed a Windows-specific regression (introduced in 1.10.0) that occurs when - multiple threads are running an `io_service`. 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. - -* Fixed a bug in handler tracking, where it was not correctly printing out some - handler IDs. - -* Fixed the comparison used to test for successful synchronous accept - operations so that it works correctly with unsigned socket descriptors. - -* Ensured the signal number is correctly passed to the completion handler when - starting an `async_wait` on a signal that is already raised. - -* Suppressed a g++ 4.8+ warning about unused typedefs. - -* Enabled the move optimisation for handlers that use the default invocation - hook. - -* Clarified that programs must not issue overlapping `async_write_at` - operations. - -* Changed the Windows `HANDLE` backend to treat `ERROR_MORE_DATA` as a - non-fatal error when returned by `GetOverlappedResult` for a synchronous - read. - -* Visual C++ language extensions use `generic` as a keyword. Added a - workaround that renames the namespace to `cpp_generic` when those language - extensions are in effect. - -* Fixed some asynchronous operations that missed out on getting `async_result` - support in 1.10.0. In particular, the buffered stream templates have been - updated so that they adhere to current handler patterns. - -* Enabled move support for Microsoft Visual Studio 2012. - -* Added `use_future` support for Microsoft Visual Studio 2012. - -* Removed a use of `std::min` in the Windows IOCP backend to avoid a - dependency on the `<algorithm>` header. - -* Eliminated some unnecessary handler copies. - -* Fixed support for older versions of OpenSSL that do not provide the - `SSL_CTX_clear_options` function. - -* Fixed various minor and cosmetic issues in code and documentation. - -[heading Asio 1.10.0] - -* Added new traits classes, `handler_type` and `async_result`, that allow the - customisation of the return type of an initiating function. - -* Added the `asio::spawn()` function, a high-level wrapper for running - stackful coroutines, based on the Boost.Coroutine library. The `spawn()` - function enables programs to implement asynchronous logic in a synchronous - manner. For example: `size_t n = my_socket.async_read_some(my_buffer, yield);`. - For further information, see [link asio.overview.core.spawn Stackful - Coroutines]. - -* Added the `asio::use_future` special value, which provides first-class - support for returning a C++11 `std::future` from an asynchronous - operation's initiating function. For example: - `future<size_t> = my_socket.async_read_some(my_buffer, asio::use_future);`. - For further information, see [link asio.overview.cpp2011.futures C++ - 2011 Support - Futures]. - -* 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 [link asio.overview.core.coroutine - Stackless Coroutines]. - -* Added a new handler hook called `asio_handler_is_continuation`. - Asynchronous operations may represent a continuation of the asynchronous - control flow associated with the current executing handler. The - `asio_handler_is_continuation` hook can be customised to return `true` 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, `spawn()` and composed asynchronous - operations. - -* Added four new generic protocol classes, `generic::datagram_protocol`, - `generic::raw_protocol`, `generic::seq_packet_protocol` and - `generic::stream_protocol`, which implement the `Protocol` type - requirements, but allow the user to specify the address family (e.g. - `AF_INET`) and protocol type (e.g. `IPPROTO_TCP`) at runtime. - For further information, see [link - asio.overview.networking.other_protocols Support for Other Protocols]. - -* Added C++11 move constructors that allow the conversion of a socket (or - acceptor) into a more generic type. For example, an `ip::tcp::socket` can - be converted into a `generic::stream_protocol::socket` via move - construction. - For further information, see [link - asio.overview.networking.other_protocols Support for Other Protocols]. - -* Extended the `basic_socket_acceptor<>`'s `accept()` and `async_accept()` - functions to allow a new connection to be accepted directly into a socket - of a more generic type. For example, an `ip::tcp::acceptor` can be used to - accept into a `generic::stream_protocol::socket` object. - For further information, see [link - asio.overview.networking.other_protocols Support for Other Protocols]. - -* 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. - -* Add the ability to use Asio without Boost, for a limited set of platforms. - When using a C++11 compiler, most of Asio may now be used without a - dependency on Boost header files or libraries. To use Asio in this way, - define `ASIO_STANDALONE` on your compiler command line or as part of the - project options. This standalone configuration has currently been tested for - the following platforms and compilers: - - * Linux with g++ 4.7 (requires [^-std=c++11]) - - * Mac OS X with clang++ / Xcode 4.6 (requires [^-std=c++11 -stdlib=libc++]) - -* Various SSL enhancements. Thanks go to Nick Jones, on whose work these changes - are based. - - * Added support for SSL handshakes with re-use of data already read from - the wire. New overloads of the `ssl::stream<>` class's `handshake()` and - `async_handshake()` functions have been added. These accept a - `ConstBufferSequence` to be used as initial input to the ssl engine for - the handshake procedure. - - * Added support for creation of TLSv1.1 and TLSv1.2 `ssl::context` objects. - - * Added a `set_verify_depth()` function to the `ssl::context` and - `ssl::stream<>` classes. - - * Added the ability to load SSL certificate and key data from memory - buffers. New functions, `add_certificate_authority()`, - `use_certificate()`, `use_certificate_chain()`, `use_private_key()`, - `use_rsa_private_key()` and `use_tmp_dh()`, have been added to the - `ssl::context` class. - - * Changed `ssl::context` to automatically disable SSL compression by - default. To enable, use the new `ssl::context::clear_options()` function, - as in `my_context.clear_options(ssl::context::no_compression)`. - -* Fixed a potential deadlock in `signal_set` implementation. - -* Fixed an error in acceptor example in documentation. - -* Fixed copy-paste errors in waitable timer documentation. - -* Added assertions to satisfy some code analysis tools. - -* Fixed a malformed `#warning` directive. - -* Fixed a potential data race in the Linux `epoll` implementation. - -* Fixed a Windows-specific bug, where certain operations might generate an - `error_code` with an invalid (i.e. `NULL`) `error_category`. - -* Fixed `basic_waitable_timer`'s underlying implementation so that it can - handle any `time_point` value without overflowing the intermediate duration - objects. - -* Fixed a problem with lost thread wakeups that can occur when making - concurrent calls to `run()` and `poll()` on the same `io_service` object. - -* Fixed implementation of asynchronous connect operation so that it can cope - with spurious readiness notifications from the reactor. - -* Fixed a memory leak in the `ssl::rfc2818_verification` class. - -* Added a mechanism for disabling automatic Winsock initialisation. See the - header file [^asio/detail/winsock_init.hpp] for details. - -[heading Asio 1.8.3] - -* Fixed some 64-to-32-bit conversion warnings. - -* Fixed various small errors in documentation and comments. - -* Fixed an error in the example embedded in `basic_socket::get_option`'s - documentation. - -* Changed to use `long` rather than `int` for SSL_CTX options, to match OpenSSL. - -* Changed to use `_snwprintf` to address a compile error due to the changed - `swprintf` signature in recent versions of MinGW. - -* Fixed a deadlock that can occur on Windows when shutting down a pool of - `io_service` threads due to running out of work. - -* Changed UNIX domain socket example to treat errors from `accept` as non-fatal. - -* Added a small block recycling optimisation to improve default memory - allocation behaviour. - -[heading Asio 1.8.2] - -* Fixed an incompatibility between `ip::tcp::iostream` and C++11. - -* Decorated GCC attribute names with underscores to prevent interaction - with user-defined macros. - -* Added missing `#include <cctype>`, needed for some versions of MinGW. - -* Changed to use [^gcc]'s atomic builtins on ARM CPUs, when available. - -* Changed strand destruction to be a no-op, to allow strand objects to be - destroyed after their associated `io_service` has been destroyed. - -* Added support for some newer versions of glibc which provide the - `epoll_create1()` function but always fail with ENOSYS. - -* Changed the SSL implementation to throw an exception if SSL engine - initialisation fails. - -* Fixed another regression in `buffered_write_stream`. - -* Implemented various minor performance improvements, primarily targeted at - Linux x86 and x86-64 platforms. - -[heading Asio 1.8.1] - -* Changed the `epoll_reactor` backend to do lazy registration for `EPOLLOUT` - events. - -* Fixed the `epoll_reactor` handling of out-of-band data, which was broken by - an incomplete fix in the last release. - -* Changed Asio's SSL wrapper to respect OpenSSL's `OPENSSL_NO_ENGINE` feature - test `#define`. - -* Fixed `windows::object_handle` so that it works with Windows compilers that - support C++11 move semantics (such as [^g++]). - -* Improved the performance of strand rescheduling. - -* Added support for [^g++] 4.7 when compiling in C++11 mode. - -* Fixed a problem where `signal_set` handlers were not being delivered when - the `io_service` was constructed with a `concurrency_hint` of 1. - -[heading Asio 1.8.0] - -* Added a new class template `basic_waitable_timer` based around the C++11 clock - type requirements. It may be used with the clocks from the C++11 `<chrono>` - library facility or, if those are not available, Boost.Chrono. The typedefs - `high_resolution_timer`, `steady_timer` and `system_timer` may be used to - create timer objects for the standard clock types. - -* Added a new `windows::object_handle` class for performing waits on Windows - kernel objects. Thanks go to Boris Schaeling for contributing substantially - to the development of this feature. - -* On Linux, `connect()` can return EAGAIN in certain circumstances. Remapped - this to another error so that it doesn't look like a non-blocking operation. - -* Fixed a compile error on NetBSD. - -* Fixed deadlock on Mac OS X. - -* Fixed a regression in `buffered_write_stream`. - -* Fixed a non-paged pool "leak" on Windows when an `io_service` is repeatedly - run without anything to do. - -* 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. - -* Fixed a bug where the second buffer in an array of two buffers may be ignored - if the first buffer is empty. - -[heading Asio 1.6.1] - -* Implemented various performance improvements, including: - - * Using thread-local operation queues in single-threaded use cases (i.e. when - `concurrency_hint` is 1) to eliminate a lock/unlock pair. - - * Allowing some `epoll_reactor` speculative operations to be performed - without holding the lock. - - * Improving locality of reference by performing an `epoll_reactor`'s I/O - operation immediately before the corresponding handler is called. This also - improves scalability across CPUs when multiple threads are running the - `io_service`. - - * Specialising asynchronous read and write operations for buffer sequences - that are arrays (`boost::array` or `std::array`) of exactly two buffers. - -* Fixed a compile error in the regex overload of `async_read_until`. - -* Fixed a Windows-specific compile error by explicitly specifying the - `signal()` function from the global namespace. - -* Changed the `deadline_timer` implementation so that it does not read the - clock unless the timer heap is non-empty. - -* Changed the SSL stream's buffers' sizes so that they are large enough to hold - a complete TLS record. - -* Fixed the behaviour of the synchronous `null_buffers` operations so that they - obey the user's non-blocking setting. - -* Changed to set the size of the select `fd_set` at runtime when using Windows. - -* Disabled an MSVC warning due to const qualifier being applied to function type. - -* Fixed a crash that occurs when using the Intel C++ compiler. - -* Changed the initialisation of the OpenSSL library so that it supports all - available algorithms. - -* Fixed the SSL error mapping used when the session is gracefully shut down. - -* Added some latency test programs. - -* Clarified that a read operation ends when the buffer is full. - -* Fixed an exception safety issue in `epoll_reactor` initialisation. - -* Made the number of strand implementations configurable by defining - `(BOOST_)ASIO_STRAND_IMPLEMENTATIONS` to the desired number. - -* Added support for a new `(BOOST_)ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION` flag - which switches the allocation of strand implementations to use a round-robin - approach rather than hashing. - -* Fixed potential strand starvation issue that can occur when `strand.post()` - is used. - -[heading Asio 1.6.0] - -* Improved support for C++0x move construction to further reduce copying of - handler objects. In certain designs it is possible to eliminate virtually all - copies. Move support is now enabled when compiling in [^-std=c++0x] mode on - g++ 4.5 or higher. - -* Added build support for platforms that don't provide either of `signal()` or - `sigaction()`. - -* Changed to use C++0x variadic templates when they are available, rather than - generating function overloads using the Boost.Preprocessor library. - -* Ensured the value of `errno` is preserved across the implementation's signal - handler. - -* On Windows, ensured the count of outstanding work is decremented for - abandoned operations (i.e. operations that are being cleaned up within the - `io_service` destructor). - -* Fixed behaviour of zero-length reads and writes in the new SSL implementation. - -* Added support for building with OpenSSL 1.0 when `OPENSSL_NO_SSL2` is defined. - -* Changed most examples to treat a failure by an accept operation as non-fatal. - -* Fixed an error in the [^tick_count_timer] example by making the duration type - signed. Previously, a wait on an already-passed deadline would not return for - a very long time. - -[heading Asio 1.5.3] - -* 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 - `(BOOST_)ASIO_ENABLE_OLD_SSL`. - -* Added new `asio::buffer()` overloads for `std::array`, when available. The - support is automatically enabled when compiling in [^-std=c++0x] mode on g++ - 4.3 or higher, or when using MSVC 10. The support may be explicitly enabled - by defining `(BOOST_)ASIO_HAS_STD_ARRAY`, or disabled by defining - `(BOOST_)ASIO_DISABLE_STD_ARRAY`. - -* Changed to use the C++0x standard library templates `array`, `shared_ptr`, - `weak_ptr` and `atomic` when they are available, rather than the Boost - equivalents. - -* Support for `std::error_code` and `std::system_error` is no longer enabled by - default for g++ 4.5, as that compiler's standard library does not implement - `std::system_error::what()` correctly. - -[heading Asio 1.5.2] - -* Added support for C++0x move construction and assignment to sockets, serial - ports, POSIX descriptors and Windows handles. - -* Added support for the `fork()` system call. Programs that use `fork()` must - call `io_service.notify_fork()` at the appropriate times. Two new examples - have been added showing how to use this feature. - -* Cleaned up the handling of errors reported by the `close()` system call. In - particular, assume that most operating systems won't have `close()` fail with - `EWOULDBLOCK`, but if it does then set the blocking mode and restart the call. - If any other error occurs, assume the descriptor is closed. - -* The kqueue flag `EV_ONESHOT` seems to cause problems on some versions of Mac - OS X, with the `io_service` destructor getting stuck inside the `close()` - system call. Changed the kqueue backend to use `EV_CLEAR` instead. - -* Changed exception reporting to include the function name in exception `what()` - messages. - -* Fixed an insufficient initialisers warning with MinGW. - -* Changed the `shutdown_service()` member functions to be private. - -* Added archetypes for testing socket option functions. - -* Added a missing lock in `signal_set_service::cancel()`. - -* Fixed a copy/paste error in `SignalHandler` example. - -* Added the inclusion of the signal header to `signal_set_service.hpp` so that - constants like `NSIG` may be used. - -* Changed the `signal_set_service` implementation so that it doesn't assume - that `SIGRTMAX` is a compile-time constant. - -* 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. - -[heading Asio 1.5.1] - -* Added support for signal handling, using a new class called `signal_set`. - Programs may add one or more signals to the set, and then perform an - `async_wait()` operation. The specified handler will be called when one of - the signals occurs. The same signal number may registered with multiple - `signal_set` objects, however the signal number must be used only with Asio. - -* Added handler tracking, a new debugging aid. When enabled by defining - `(BOOST_)ASIO_ENABLE_HANDLER_TRACKING`, 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 [^handlerviz.pl] tool to create a visual representation of the - handlers (requires GraphViz). - -* Fixed a bug in `asio::streambuf` where the `consume()` function did not - always update the internal buffer pointers correctly. The problem may occur - when the `asio::streambuf` is filled with data using the standard C++ member - functions such as `sputn()`. (Note: the problem does not manifest when the - streambuf is populated by the Asio free functions `read()`, - `async_read()`, `read_until()` or `async_read_until()`.) - -* Fixed a bug on kqueue-based platforms, where reactor read operations that - return false from their `perform()` function are not correctly re-registered - with kqueue. - -* Support for `std::error_code` and `std::system_error` is no longer enabled by - default for MSVC10, as that compiler's standard library does not implement - `std::system_error::what()` correctly. - -* Modified the `buffers_iterator<>` and `ip::basic_resolver_iterator` classes - so that the value_type typedefs are non-const byte types. - -[heading Asio 1.5.0] - -* Added support for timeouts on socket iostreams, such as `ip::tcp::iostream`. - A timeout is set by calling `expires_at()` or `expires_from_now()` to - establish a deadline. Any socket operations which occur past the deadline - will put the iostream into a bad state. - -* Added a new `error()` member function to socket iostreams, for retrieving the - error code from the most recent system call. - -* Added a new `basic_deadline_timer::cancel_one()` function. This function lets - you cancel a single waiting handler on a timer. Handlers are cancelled in - FIFO order. - -* Added a new `transfer_exactly()` 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. - -* Added new free functions `connect()` and `async_connect()`. These operations - try each endpoint in a list until the socket is successfully connected. - -* Extended the `buffer_size()` function so that it works for buffer sequences - in addition to individual buffers. - -* Added a new `buffer_copy()` function that can be used to copy the raw bytes - between individual buffers and buffer sequences. - -* Added new non-throwing overloads of `read()`, `read_at()`, `write()` and - `write_at()` that do not require a completion condition. - -* Added friendlier compiler errors for when a completion handler does not meet - the necessary type requirements. When C++0x is available (currently supported - for g++ 4.5 or later, and MSVC 10), `static_assert` is also used to generate - an informative error message. This checking may be disabled by defining - `(BOOST_)ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS`. - -* Added support for using `std::error_code` and `std::system_error`, when - available. The support is automatically enabled when compiling in - [^-std=c++0x] mode on g++ 4.5 or higher, or when using MSVC 10. The support - may be explicitly enabled by defining `ASIO_HAS_STD_SYSTEM_ERROR`, or - disabled by defining `ASIO_DISABLE_STD_SYSTEM_ERROR`. (Available in non-Boost - version of Asio only.) - -* Made the `is_loopback()`, `is_unspecified()` and `is_multicast()` functions - consistently available across the `ip::address`, `ip::address_v4` and - `ip::address_v6` classes. - -* Added new `non_blocking()` functions for managing the non-blocking behaviour - of a socket or descriptor. The `io_control()` commands named `non_blocking_io` - are now deprecated in favour of these new functions. - -* Added new `native_non_blocking()` 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. - -* Added the `io_control()` member function for socket acceptors. - -* For consistency with the C++0x standard library, deprecated the `native_type` - typedefs in favour of `native_handle_type`, and the `native()` member - functions in favour of `native_handle()`. - -* Added a `release()` member function to posix descriptors. This function - releases ownership of the underlying native descriptor to the caller. - -* Added support for sequenced packet sockets (`SOCK_SEQPACKET`). - -* Added a new `io_service::stopped()` function that can be used to determine - whether the `io_service` has stopped (i.e. a `reset()` call is needed prior - to any further calls to `run()`, `run_one()`, `poll()` or `poll_one()`). - -* Reduced the copying of handler function objects. - -* Added support for C++0x move construction to further reduce copying of - handler objects. Move support is enabled when compiling in [^-std=c++0x] mode - on g++ 4.5 or higher, or when using MSVC10. - -* Removed the dependency on OS-provided macros for the well-known IPv4 and IPv6 - addresses. This should eliminate the annoying "missing braces around - initializer" warnings. - -* Reduced the size of `ip::basic_endpoint<>` objects (such as - `ip::tcp::endpoint` and `ip::udp::endpoint`). - -* Changed the reactor backends to assume that any descriptors or sockets added - using `assign()` may have been `dup()`-ed, and so require explicit - deregistration from the reactor. - -* Changed the SSL error category to return error strings from the OpenSSL - library. - -* Changed the separate compilation support such that, to use Asio's SSL - capabilities, you should also include 'asio/ssl/impl/src.hpp` in one source - file in your program. - -* Removed the deprecated member functions named `io_service()`. The - `get_io_service()` member functions should be used instead. - -* Removed the deprecated typedefs `resolver_query` and `resolver_iterator` from - the `ip::tcp`, `ip::udp` and `ip::icmp` classes. - -* Fixed a compile error on some versions of g++ due to anonymous enums. - -* Added an explicit cast to the `FIONBIO` constant to int to suppress a compiler - warning on some platforms. - -* Fixed warnings reported by g++'s [^-Wshadow] compiler option. - -[heading Asio 1.4.8] - -* Fixed an integer overflow problem that occurs when - `ip::address_v4::broadcast()` is used on 64-bit platforms. - -* 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. - -[heading Asio 1.4.7] - -* Fixed a problem on kqueue-based platforms where a `deadline_timer` may - never fire if the `io_service` is running in a background thread. - -* Fixed a const-correctness issue that prevented valid uses of - `has_service<>` from compiling. - -* Fixed MinGW cross-compilation. - -* Removed dependency on deprecated Boost.System functions (Boost.Asio only). - -* Ensured `close()`/`closesocket()` failures are correctly propagated. - -* Added a check for errors returned by `InitializeCriticalSectionAndSpinCount`. - -* Added support for hardware flow control on QNX. - -* Always use `pselect()` on HP-UX, if it is available. - -* Ensured handler arguments are passed as lvalues. - -* Fixed Windows build when thread support is disabled. - -* Fixed a Windows-specific problem where `deadline_timer` objects with expiry - times set more than 5 minutes in the future may never expire. - -* Fixed the resolver backend on BSD platforms so that an empty service name - resolves to port number `0`, as per the documentation. - -* Fixed read operations so that they do not accept buffer sequences of type - `const_buffers_1`. - -* Redefined `Protocol` and `id` to avoid clashing with Objective-C++ keywords. - -* Fixed a `vector` reallocation performance issue that can occur when there are - many active `deadline_timer` objects. - -* Fixed the kqueue backend so that it compiles on NetBSD. - -* Fixed the socket `io_control()` implementation on 64-bit Mac OS X and BSD - platforms. - -* Fixed a Windows-specific problem where failures from `accept()` are - incorrectly treated as successes. - -* Deprecated the separate compilation header `asio/impl/src.cpp` in - favour of `asio/impl/src.hpp`. - -[heading Asio 1.4.6] - -* Reduced compile times. (Note that some programs may need to add additional - `#include`s, e.g. if the program uses boost::array but does not explicitly - include `<boost/array.hpp>`.) - -* Reduced the size of generated code. - -* Refactored `deadline_timer` implementation to improve performance. - -* Improved multiprocessor scalability on Windows by using a dedicated hidden - thread to wait for timers. - -* Improved performance of `asio::streambuf` with `async_read()` and - `async_read_until()`. These read operations now use the existing capacity of - the `streambuf` when reading, rather than limiting the read to 512 bytes. - -* Added optional separate compilation. To enable, include - `asio/impl/src.cpp` in one source file in a program, then - build the program with `(BOOST_)ASIO_SEPARATE_COMPILATION` defined in the - project\/compiler settings. Alternatively, `(BOOST_)ASIO_DYN_LINK` may be - defined to build a separately-compiled Asio as part of a shared library. - -* Added new macro `(BOOST_)ASIO_DISABLE_FENCED_BLOCK` to permit the disabling of - memory fences around completion handlers, even if thread support is enabled. - -* Reworked timeout examples to better illustrate typical use cases. - -* Ensured that handler arguments are passed as const types. - -* Fixed incorrect parameter order in `null_buffers` variant of `async_send_to`. - -* Ensured unsigned char is used with `isdigit` in `getaddrinfo` emulation. - -* Fixed handling of very small but non-zero timeouts. - -* Fixed crash that occurred when an empty buffer sequence was passed to a - composed read or write operation. - -* Added missing operator+ overload in `buffers_iterator`. - -* Implemented cancellation of `null_buffers` operations on Windows. - -[heading Asio 1.4.5] - -* Improved performance. - -* Reduced compile times. - -* Reduced the size of generated code. - -* Extended the guarantee that background threads don't call user code to - all asynchronous operations. - -* Changed to use edge-triggered epoll on Linux. - -* Changed to use `timerfd` for dispatching timers on Linux, when - available. - -* Changed to use one-shot notifications with kqueue on Mac OS X and BSD - platforms. - -* Added a bitmask type `ip::resolver_query_base::flags` as per the TR2 - proposal. This type prevents implicit conversion from `int` to - `flags`, allowing the compiler to catch cases where users incorrectly - pass a numeric port number as the service name. - -* Added `#define NOMINMAX` for all Windows compilers. Users can define - `(BOOST_)ASIO_NO_NOMINMAX` to suppress this definition. - -* Fixed a bug where 0-byte asynchronous reads were incorrectly passing - an `error::eof` result to the completion handler. - -* Changed the `io_control()` member functions to always call `ioctl` on - the underlying descriptor when modifying blocking mode. - -* Changed the resolver implementation so that it no longer requires the - typedefs `InternetProtocol::resolver_query` and - `InternetProtocol::resolver_iterator`, as neither typedef is part of - the documented `InternetProtocol` requirements. The corresponding - typedefs in the `ip::tcp`, `ip::udp` and `ip::icmp` classes have been - deprecated. - -* Fixed out-of-band handling for reactors not based on `select()`. - -* Added new `(BOOST_)ASIO_DISABLE_THREADS` macro that allows Asio's - threading support to be independently disabled. - -* Minor documentation improvements. - -[heading Asio 1.4.4] - -* Added a new HTTP Server 4 example illustrating the use of stackless - coroutines with Asio. - -* Changed handler allocation and invocation to use `boost::addressof` to - get the address of handler objects, rather than applying `operator&` - directly. - -* Restricted MSVC buffer debugging workaround to 2008, as it causes a - crash with 2010 beta 2. - -* Fixed a problem with the lifetime of handler memory, where Windows - needs the `OVERLAPPED` structure to be valid until both the initiating - function call has returned and the completion packet has been - delivered. - -* Don't block signals while performing system calls, but instead restart - the calls if they are interrupted. - -* Documented the guarantee made by strand objects with respect to order - of handler invocation. - -* Changed strands to use a pool of implementations, to make copying of - strands cheaper. - -* Ensured that kqueue support is enabled for BSD platforms. - -* Added a `boost_` prefix to the `extern "C"` thread entry point - function. - -* In `getaddrinfo` emulation, only check the socket type (`SOCK_STREAM` - or `SOCK_DGRAM`) if a service name has been specified. This should - allow the emulation to work with raw sockets. - -* 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. - -* Applied a fix for reported excessive CPU usage under Solaris. - -* Added some support for platforms that use older compilers such as g++ - 2.95. - -[heading Asio 1.4.3] - -* Added a new ping example to illustrate the use of ICMP sockets. - -* Changed the `buffered*_stream<>` templates to treat 0-byte reads and - writes as no-ops, to comply with the documented type requirements for - `SyncReadStream`, `AsyncReadStream`, `SyncWriteStream` and - `AsyncWriteStream`. - -* Changed some instances of the `throw` keyword to - `boost::throw_exception()` to allow Asio to be used when exception - support is disabled. Note that the SSL wrappers still require - exception support. - -* Made Asio compatible with the OpenSSL 1.0 beta. - -* Eliminated a redundant system call in the Solaris /dev/poll backend. - -* Fixed a bug in resizing of the bucket array in the internal hash maps. - -* Ensured correct propagation of the error code when a synchronous - accept fails. - -* Ensured correct propagation of the error code when a synchronous read - or write on a Windows `HANDLE` fails. - -* Fixed failures reported when `_GLIBCXX_DEBUG` is defined. - -* Fixed custom memory allocation support for timers. - -* Tidied up various warnings reported by g++. - -* 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. - -[heading Asio 1.4.2] - -* 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 `(BOOST_)ASIO_HASH_MAP_BUCKETS` 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.) - -* Add performance optimisation for the Windows IOCP backend for when no - timers are used. - -* Prevent locale settings from affecting formatting of TCP and UDP - endpoints. - -* Fix a memory leak that occurred when an asynchronous SSL operation's - completion handler threw an exception. - -* Fix the implementation of `io_control()` so that it adheres to the - documented type requirements for IoControlCommand. - -* Fix incompatibility between Asio and ncurses.h. - -* On Windows, specifically handle the case when an overlapped `ReadFile` - call fails with `ERROR_MORE_DATA`. This enables a hack where a - `windows::stream_handle` can be used with a message-oriented named - pipe. - -* Fix system call wrappers to always clear the error on success, as - POSIX allows successful system calls to modify errno. - -* Don't include termios.h if `(BOOST_)ASIO_DISABLE_SERIAL_PORT` is - defined. - -* Cleaned up some more MSVC level 4 warnings. - -* Various documentation fixes. - -[heading Asio 1.4.1] - -* Improved compatibility with some Windows firewall software. - -* Ensured arguments to `windows::overlapped_ptr::complete()` are correctly - passed to the completion handler. - -* Fixed a link problem and multicast failure on QNX. - -* Fixed a compile error in SSL support on MinGW / g++ 3.4.5. - -* Drop back to using a pipe for notification if eventfd is not available - at runtime on Linux. - -* Various minor bug and documentation fixes. - -[heading Asio 1.4.0] - -* Enhanced CompletionCondition concept with the signature - `size_t CompletionCondition(error_code ec, size_t total)`, 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). - -* New `windows::overlapped_ptr` class to allow arbitrary overlapped I/O - functions (such as `TransmitFile`) to be used with Asio. - -* On recent versions of Linux, an `eventfd` descriptor is now used (rather than - a pipe) to interrupt a blocked select/epoll reactor. - -* Added const overloads of `lowest_layer()`. - -* 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). - -* 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. - -[heading Asio 1.2.0] - -* Added support for serial ports. - -* Added support for UNIX domain sockets. - -* Added support for raw sockets and ICMP. - -* Added wrappers for POSIX stream-oriented file descriptors (excluding regular - files). - -* Added wrappers for Windows stream-oriented `HANDLE`s such as named pipes - (requires `HANDLE`s that work with I/O completion ports). - -* Added wrappers for Windows random-access `HANDLE`s such as files (requires - `HANDLE`s that work with I/O completion ports). - -* Added support for reactor-style operations (i.e. they report readiness but - perform no I/O) using a new `null_buffers` type. - -* Added an iterator type for bytewise traversal of buffer sequences. - -* Added new `read_until()` and `async_read_until()` overloads that take a - user-defined function object for locating message boundaries. - -* Added an experimental two-lock queue (enabled by defining - `(BOOST_)ASIO_ENABLE_TWO_LOCK_QUEUE`) that may provide better `io_service` - scalability across many processors. - -* Various fixes, performance improvements, and more complete coverage of the - custom memory allocation support. - -[heading Asio 1.0.0] - -First stable release of Asio. - -[endsect] |