]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | [/ |
2 | / Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) | |
3 | / | |
4 | / Distributed under the Boost Software License, Version 1.0. (See accompanying | |
5 | / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 | /] | |
7 | ||
8 | [section:history Revision History] | |
9 | ||
10 | [heading Asio 1.10.8 / Boost 1.62] | |
11 | ||
12 | * Added compatibility with OpenSSL 1.1.0 ([ticket 12238]). | |
13 | * Fixed out-of-bounds iterator use in `asio::connect()` when the | |
14 | `connect_condition` returns an end iterator ([ticket 12354]). | |
15 | * Added a workaround for a move detection problem on MSVC 2015 Update 2 | |
16 | ([ticket 12115]). | |
17 | * Changed a workaround that was previously added for broken Windows firewalls | |
18 | to only bind to 127.0.0.1 if `getsockname` reports 0.0.0.0 ([ticket | |
19 | 12406]). | |
20 | * Added call to `SSL_COMP_free_compression_methods` to fix two memory leaks | |
21 | reported at shutdown, for OpenSSL versions >= 1.0.2 and < 1.1.0 ([ticket | |
22 | 10795]). | |
23 | * Fixed `use_future` compile error encountered on some standard library | |
24 | implementations, by changing `std::allocator<void>` use to a non-void | |
25 | template parameter. | |
26 | * Enabled use of native `getaddrinfo` by default on Apple OSes, rather than | |
27 | emulation in terms of `getipnodebyname`. | |
28 | ||
29 | [heading Asio 1.10.7 / Boost 1.60] | |
30 | ||
31 | * Added support for Windows 8.1 Store apps. | |
32 | * Fixed macro multiple definition error on Microsoft Visual Studio 2015 | |
33 | ([ticket 11539]). | |
34 | * Changed Asio's SSL wrapper to respect OpenSSL's `OPENSSL_NO_SSL3` feature | |
35 | test `#define` ([ticket 11754]). | |
36 | * Changed Asio's SSL wrapper to use OpenSSL's new `SSL_CTX_clear_chain_certs` | |
37 | function, if available. | |
38 | * Suppressed a clang 3.6+ warning about unused typedefs ([ticket 11767]). | |
39 | * Regenerated certificates used by SSL examples. | |
40 | * Fixed buffer sizes passed to `strncat` in the `getaddrinfo` emulation and in | |
41 | the SSL wrapper's password handling. | |
42 | * Changed Windows backend to use non-macro `CreateEventW` rather than | |
43 | `CreateEvent` ([ticket 11732]). | |
44 | ||
45 | [heading Asio 1.10.6 / Boost 1.58] | |
46 | ||
47 | * Ensured errors generated by Windows' `ConnectEx` function are mapped to their | |
48 | portable equivalents ([ticket 10744]). | |
49 | * Added new macro `BOOST_ASIO_DISABLE_CONNECTEX` to allow use of `ConnectEx` to | |
50 | be explicitly disabled. | |
51 | * Fixed a race condition in `windows::object_handle` when there are pending | |
52 | wait operations on destruction ([ticket 10624]). | |
53 | * Fixed IPv6 address parsing on FreeBSD, where a trailing scope ID would cause | |
54 | conversion to fail with `EINVAL`. | |
55 | * Worked around shared library visibility issues by ensuring Asio types use | |
56 | default visibility ([ticket 9465], [ticket 11070]). | |
57 | * Changed the SSL wrapper to call the password callback when loading an | |
58 | in-memory key ([ticket 10828]). | |
59 | * Fixed false SSL error reports by ensuring that the SSL error queue is cleared | |
60 | prior to each operation. | |
61 | * Fixed an `ssl::stream<>` bug that may result in spurious 'short read' errors. | |
62 | * Removed a redundant null pointer check in the SSL engine ([ticket 10088]). | |
63 | * Added options for disabling TLS v1.1 and v1.2 ([ticket 10690]). | |
64 | * Removed use of deprecated OpenSSL function `ERR_remove_state`. | |
65 | * Fixed detection of various C++11 features with Clang ([ticket 8835], | |
66 | [ticket 10884]). | |
67 | * Fixed detection of C++11 `std::addressof` with [^g++] ([ticket 10982]). | |
68 | * Changed multicast test to treat certain `join_group` failures as non-fatal. | |
69 | * Decoupled Asio unit tests from Boost.Test ([ticket 11116]). | |
70 | * Changed the tutorial to use `std::endl` to ensure output is flushed. | |
71 | * Fixed an unsigned integer overflow reported by Clang's integer sanitizer. | |
72 | * Added support for move-only return types when using a `yield_context` object | |
73 | with asynchronous operations. | |
74 | * Changed `yield_context` to allow reentrant calls to the completion handler | |
75 | from an initiating function. | |
76 | * Updated detection of Windows Runtime to work with latest Windows SDK. | |
77 | ||
78 | [heading Asio 1.10.5 / Boost 1.57] | |
79 | ||
80 | * Fixed the [^kqueue] reactor so that it works on FreeBSD ([ticket 10606]). | |
81 | * Fixed an issue in the [^kqueue] reactor which resulted in spinning when using | |
82 | serial ports on Mac OS ([ticket 10496]). | |
83 | * Fixed [^kqueue] reactor support for read-only file descriptors | |
84 | ([ticket 10367]). | |
85 | * Fixed a compile error when using the [^/dev/poll] reactor ([ticket 10350], | |
86 | [ticket 10572]). | |
87 | * Changed the Windows backend to use `WSASocketW`, as `WSASocketA` has been | |
88 | deprecated ([ticket 10534]). | |
89 | * Fixed some warnings reported by Visual C++ 2013 ([ticket 10376]). | |
90 | * Fixed integer type used in the WinRT version of the byte-order conversion | |
91 | functions ([ticket 10539]). | |
92 | * Changed documentation to indicate that `use_future` and `spawn()` are not | |
93 | made available when including the `asio.hpp` convenience header ([ticket | |
94 | 10567]). | |
95 | * Explicitly marked `asio::strand` as deprecated. Use | |
96 | `asio::io_service::strand` instead. | |
97 | ||
98 | [heading Asio 1.10.4 / Boost 1.56] | |
99 | ||
100 | * Stopped using certain Winsock functions that are marked as deprecated in the | |
101 | latest Visual C++ and Windows SDK. | |
102 | * Fixed a shadow variable warning on Windows. | |
103 | * Fixed a regression in the [^kqueue] backend that was introduced in Asio | |
104 | 1.10.2. | |
105 | * Added a workaround for building the unit tests with [^gcc] on AIX. | |
106 | ||
107 | [heading Asio 1.10.3] | |
108 | ||
109 | * Worked around a [^gcc] problem to do with anonymous enums ([ticket 10042]). | |
110 | * Reverted the Windows `HANDLE` backend change to ignore `ERROR_MORE_DATA`. | |
111 | Instead, the error will be propagated as with any other (i.e. in an | |
112 | `error_code` or thrown as a `system_error`), and the number of bytes | |
113 | transferred will be returned. For code that needs to handle partial messages, | |
114 | the `error_code` overload should be used ([ticket 10034]). | |
115 | * Fixed an off-by-one error in the `signal_set` implementation's signal | |
116 | number check ([ticket 9324]). | |
117 | * Changed the Windows IOCP backend to not assume that | |
118 | `SO_UPDATE_CONNECT_CONTEXT` is defined ([ticket 10016]). | |
119 | * Fixed a Windows-specific issue, introduced in Asio 1.10.2, by using | |
120 | `VerifyVersionInfo` rather than `GetVersionEx`, as `GetVersionEx` has been | |
121 | deprecated. | |
122 | * Changed to use SSE2 intrinsics rather than inline assembly, to allow the | |
123 | Cray compiler to work. | |
124 | ||
125 | [heading Asio 1.10.2] | |
126 | ||
127 | * Fixed `asio::spawn()` to work correctly with new Boost.Coroutine interface | |
128 | ([ticket 9442], [ticket 9928]). | |
129 | * Ensured that incomplete `asio::spawn()` coroutines are correctly unwound when | |
130 | cleaned up by the `io_service` destructor ([ticket 9731]). | |
131 | * Fixed delegation of continuation hook for handlers produced by | |
132 | `io_service::wrap()` and `strand::wrap()` ([ticket 9741]). | |
133 | * Changed the Windows I/O completion port backend to use `ConnectEx`, if | |
134 | available, for connection-oriented IP sockets. | |
135 | * Changed the `io_service` backend for non-Windows (and non-IOCP Windows) | |
136 | platforms to use a single condition variable per `io_service` instance. | |
137 | This addresses a potential race condition when `run_one()` is used from | |
138 | multiple threads. | |
139 | * Prevented integer overflow when computing timeouts based on some | |
140 | `boost::chrono` and `std::chrono` clocks ([ticket 9662], [ticket 9778]). | |
141 | * Made further changes to `EV_CLEAR` handling in the kqueue backend, to address | |
142 | other cases where the `close()` system call may hang on Mac OS X. | |
143 | * Fixed infinite recursion in implementation of | |
144 | `resolver_query_base::flags::operator~` ([ticket 9548]). | |
145 | * Made the `select` reactor more efficient on Windows for large numbers of | |
146 | sockets ([ticket 9528]). | |
147 | * Fixed a Windows-specific type-aliasing issue reported by [^gcc] ([ticket | |
148 | 9550]). | |
149 | * Prevented execution of compile-time-only buffer test to avoid triggering an | |
150 | address sanitiser warning ([ticket 8295]). | |
151 | * Disabled the `GetQueuedCompletionStatus` timeout workaround on recent | |
152 | versions of Windows. | |
153 | * Added support for string-based scope IDs when using link-local multicast | |
154 | addresses. | |
155 | * Changed IPv6 multicast group join to use the address's scope ID as the | |
156 | interface, if an interface is not explicitly specified. | |
157 | * Fixed multicast test failure on Mac OS X and the BSDs by using a link-local | |
158 | multicast address. | |
159 | * Various minor documentation improvements ([ticket 8295], [ticket 9605], | |
160 | [ticket 9771]). | |
161 | ||
162 | [heading Asio 1.10.1 / Boost 1.55] | |
163 | ||
164 | * Implemented a limited port to Windows Runtime. This support requires that the | |
165 | language extensions be enabled. Due to the restricted facilities exposed by | |
166 | the Windows Runtime API, the port also comes with the following caveats: | |
167 | * The core facilities such as the `io_service`, `strand`, buffers, composed | |
168 | operations, timers, etc., should all work as normal. | |
169 | * For sockets, only client-side TCP is supported. | |
170 | * Explicit binding of a client-side TCP socket is not supported. | |
171 | * The `cancel()` function is not supported for sockets. Asynchronous | |
172 | operations may only be cancelled by closing the socket. | |
173 | * Operations that use `null_buffers` are not supported. | |
174 | * Only `tcp::no_delay` and `socket_base::keep_alive` options are supported. | |
175 | * Resolvers do not support service names, only numbers. I.e. you must | |
176 | use "80" rather than "http". | |
177 | * Most resolver query flags have no effect. | |
178 | * Fixed a regression (introduced in Boost 1.54) where, on some platforms, errors | |
179 | from `async_connect` were not correctly propagated through to the completion | |
180 | handler ([ticket 8795]). | |
181 | * Fixed a Windows-specific regression (introduced in Boost 1.54) that occurs | |
182 | when multiple threads are running an `io_service`. When the bug occurs, the | |
183 | result of an asynchronous operation (error and bytes tranferred) is | |
184 | incorrectly discarded and zero values used instead. For TCP sockets this | |
185 | results in spurious end-of-file notifications ([ticket 8933]). | |
186 | * Fixed a bug in handler tracking, where it was not correctly printing out some | |
187 | handler IDs ([ticket 8808]). | |
188 | * Fixed the comparison used to test for successful synchronous accept | |
189 | operations so that it works correctly with unsigned socket descriptors | |
190 | ([ticket 8752]). | |
191 | * Ensured the signal number is correctly passed to the completion handler when | |
192 | starting an `async_wait` on a signal that is already raised ([ticket 8738]). | |
193 | * Suppressed a g++ 4.8+ warning about unused typedefs ([ticket 8980]). | |
194 | * Enabled the move optimisation for handlers that use the default invocation | |
195 | hook ([ticket 8624]). | |
196 | * Clarified that programs must not issue overlapping `async_write_at` | |
197 | operations ([ticket 8669]). | |
198 | * Changed the Windows `HANDLE` backend to treat `ERROR_MORE_DATA` as a | |
199 | non-fatal error when returned by `GetOverlappedResult` for a synchronous | |
200 | read ([ticket 8722]). | |
201 | * Visual C++ language extensions use `generic` as a keyword. Added a | |
202 | workaround that renames the namespace to `cpp_generic` when those language | |
203 | extensions are in effect. | |
204 | * Fixed some asynchronous operations that missed out on getting `async_result` | |
205 | support in Boost 1.54. In particular, the buffered stream templates have been | |
206 | updated so that they adhere to current handler patterns ([ticket 9000], | |
207 | [ticket 9001]). | |
208 | * Enabled move support for Microsoft Visual Studio 2012 ([ticket 8959]). | |
209 | * Added `use_future` support for Microsoft Visual Studio 2012. | |
210 | * Removed a use of `std::min` in the Windows IOCP backend to avoid a | |
211 | dependency on the `<algorithm>` header ([ticket 8758]). | |
212 | * Eliminated some unnecessary handler copies. | |
213 | * Fixed support for older versions of OpenSSL that do not provide the | |
214 | `SSL_CTX_clear_options` function ([ticket 9273]). | |
215 | * Fixed various minor and cosmetic issues in code and documentation | |
216 | (including [ticket 8347], [ticket 8950], [ticket 8953], [ticket 8965], | |
217 | [ticket 8997], [ticket 9230]). | |
218 | ||
219 | [heading Asio 1.10.0 / Boost 1.54] | |
220 | ||
221 | * Added new traits classes, `handler_type` and `async_result`, that allow the | |
222 | customisation of the return type of an initiating function. | |
223 | * Added the `asio::spawn()` function, a high-level wrapper for running | |
224 | stackful coroutines, based on the Boost.Coroutine library. The `spawn()` | |
225 | function enables programs to implement asynchronous logic in a synchronous | |
226 | manner. For example: `size_t n = my_socket.async_read_some(my_buffer, yield);`. | |
227 | For further information, see [link boost_asio.overview.core.spawn Stackful | |
228 | Coroutines]. | |
229 | * Added the `asio::use_future` special value, which provides first-class | |
230 | support for returning a C++11 `std::future` from an asynchronous | |
231 | operation's initiating function. For example: | |
232 | `future<size_t> = my_socket.async_read_some(my_buffer, asio::use_future);`. | |
233 | For further information, see [link boost_asio.overview.cpp2011.futures C++ | |
234 | 2011 Support - Futures]. | |
235 | * Promoted the stackless coroutine class and macros to be part of Asio's | |
236 | documented interface, rather than part of the HTTP server 4 example. | |
237 | For further information, see [link boost_asio.overview.core.coroutine | |
238 | Stackless Coroutines]. | |
239 | * Added a new handler hook called `asio_handler_is_continuation`. | |
240 | Asynchronous operations may represent a continuation of the asynchronous | |
241 | control flow associated with the current executing handler. The | |
242 | `asio_handler_is_continuation` hook can be customised to return `true` if | |
243 | this is the case, and Asio's implementation can use this knowledge to | |
244 | optimise scheduling of the new handler. To cover common cases, Asio | |
245 | customises the hook for strands, `spawn()` and composed asynchronous | |
246 | operations. | |
247 | * Added four new generic protocol classes, `generic::datagram_protocol`, | |
248 | `generic::raw_protocol`, `generic::seq_packet_protocol` and | |
249 | `generic::stream_protocol`, which implement the `Protocol` type | |
250 | requirements, but allow the user to specify the address family (e.g. | |
251 | `AF_INET`) and protocol type (e.g. `IPPROTO_TCP`) at runtime. | |
252 | For further information, see [link | |
253 | boost_asio.overview.networking.other_protocols Support for Other Protocols]. | |
254 | * Added C++11 move constructors that allow the conversion of a socket (or | |
255 | acceptor) into a more generic type. For example, an `ip::tcp::socket` can | |
256 | be converted into a `generic::stream_protocol::socket` via move | |
257 | construction. | |
258 | For further information, see [link | |
259 | boost_asio.overview.networking.other_protocols Support for Other Protocols]. | |
260 | * Extended the `basic_socket_acceptor<>`'s `accept()` and `async_accept()` | |
261 | functions to allow a new connection to be accepted directly into a socket | |
262 | of a more generic type. For example, an `ip::tcp::acceptor` can be used to | |
263 | accept into a `generic::stream_protocol::socket` object. | |
264 | For further information, see [link | |
265 | boost_asio.overview.networking.other_protocols Support for Other Protocols]. | |
266 | * Moved existing examples into a C++03-specific directory, and added a new | |
267 | directory for C++11-specific examples. A limited subset of the C++03 | |
268 | examples have been converted to their C++11 equivalents. | |
269 | * Various SSL enhancements. Thanks go to Nick Jones, on whose work these changes | |
270 | are based. | |
271 | * Added support for SSL handshakes with re-use of data already read from | |
272 | the wire. New overloads of the `ssl::stream<>` class's `handshake()` and | |
273 | `async_handshake()` functions have been added. These accept a | |
274 | `ConstBufferSequence` to be used as initial input to the ssl engine for | |
275 | the handshake procedure. | |
276 | * Added support for creation of TLSv1.1 and TLSv1.2 `ssl::context` objects. | |
277 | * Added a `set_verify_depth()` function to the `ssl::context` and | |
278 | `ssl::stream<>` classes. | |
279 | * Added the ability to load SSL certificate and key data from memory | |
280 | buffers. New functions, `add_certificate_authority()`, | |
281 | `use_certificate()`, `use_certificate_chain()`, `use_private_key()`, | |
282 | `use_rsa_private_key()` and `use_tmp_dh()`, have been added to the | |
283 | `ssl::context` class. | |
284 | * Changed `ssl::context` to automatically disable SSL compression by | |
285 | default. To enable, use the new `ssl::context::clear_options()` function, | |
286 | as in `my_context.clear_options(ssl::context::no_compression)`. | |
287 | * Fixed a potential deadlock in `signal_set` implementation. | |
288 | * Fixed an error in acceptor example in documentation [ticket 8421]. | |
289 | * Fixed copy-paste errors in waitable timer documentation [ticket 8602]. | |
290 | * Added assertions to satisfy some code analysis tools [ticket 7739]. | |
291 | * Fixed a malformed `#warning` directive [ticket 7939]. | |
292 | * Fixed a potential data race in the Linux `epoll` implementation. | |
293 | * Fixed a Windows-specific bug, where certain operations might generate an | |
294 | `error_code` with an invalid (i.e. `NULL`) `error_category` [ticket 8613]. | |
295 | * Fixed `basic_waitable_timer`'s underlying implementation so that it can | |
296 | handle any `time_point` value without overflowing the intermediate duration | |
297 | objects. | |
298 | * Fixed a problem with lost thread wakeups that can occur when making | |
299 | concurrent calls to `run()` and `poll()` on the same `io_service` object | |
300 | [ticket 8354]. | |
301 | * Fixed implementation of asynchronous connect operation so that it can cope | |
302 | with spurious readiness notifications from the reactor [ticket 7961]. | |
303 | * Fixed a memory leak in the `ssl::rfc2818_verification` class. | |
304 | * Added a mechanism for disabling automatic Winsock initialisation [ticket | |
305 | 3605]. See the header file [^boost/asio/detail/winsock_init.hpp] for details. | |
306 | ||
307 | [heading Asio 1.8.3 / Boost 1.53] | |
308 | ||
309 | * Fixed some 64-to-32-bit conversion warnings ([ticket 7459]). | |
310 | * Fixed some small errors in documentation and comments ([ticket 7761]). | |
311 | * Fixed an error in the example embedded in `basic_socket::get_option`'s | |
312 | documentation ([ticket 7562]). | |
313 | * Changed to use `long` rather than `int` for SSL_CTX options, to match OpenSSL | |
314 | ([ticket 7209]). | |
315 | * Changed to use `_snwprintf` to address a compile error due to the changed | |
316 | `swprintf` signature in recent versions of MinGW ([ticket 7373]). | |
317 | * Fixed a deadlock that can occur on Windows when shutting down a pool of | |
318 | `io_service` threads due to running out of work ([ticket 7552]). | |
319 | * Enabled the `noexcept` qualifier for error categories ([ticket 7797]). | |
320 | * Changed UNIX domain socket example to treat errors from `accept` as non-fatal | |
321 | ([ticket 7488]). | |
322 | * Added a small block recycling optimisation to improve default memory | |
323 | allocation behaviour. | |
324 | ||
325 | [heading Asio 1.8.2 / Boost 1.51] | |
326 | ||
327 | * Fixed an incompatibility between `ip::tcp::iostream` and C++11 | |
328 | ([@https://svn.boost.org/trac/boost/ticket/7162 #7162]). | |
329 | * Decorated GCC attribute names with underscores to prevent interaction | |
330 | with user-defined macros | |
331 | ([@https://svn.boost.org/trac/boost/ticket/6415 #6415]). | |
332 | * Added missing `#include <cctype>`, needed for some versions of MinGW. | |
333 | * Changed to use [^gcc]'s atomic builtins on ARM CPUs, when available | |
334 | ([@https://svn.boost.org/trac/boost/ticket/7140 #7140]). | |
335 | * Changed strand destruction to be a no-op, to allow strand objects to be | |
336 | destroyed after their associated `io_service` has been destroyed. | |
337 | * Added support for some newer versions of glibc which provide the | |
338 | `epoll_create1()` function but always fail with `ENOSYS` | |
339 | ([@https://svn.boost.org/trac/boost/ticket/7012 #7012]). | |
340 | * Changed the SSL implementation to throw an exception if SSL engine | |
341 | initialisation fails | |
342 | ([@https://svn.boost.org/trac/boost/ticket/6303 #6303]). | |
343 | * Fixed another regression in `buffered_write_stream` | |
344 | ([@https://svn.boost.org/trac/boost/ticket/6310 #6310]). | |
345 | * Implemented various minor performance improvements, primarily targeted at | |
346 | Linux x86 and x86-64 platforms. | |
347 | ||
348 | [heading Asio 1.8.1 / Boost 1.50] | |
349 | ||
350 | * Changed the `epoll_reactor` backend to do lazy registration for `EPOLLOUT` | |
351 | events. | |
352 | * Fixed the `epoll_reactor` handling of out-of-band data, which was broken by | |
353 | an incomplete fix in the last release. | |
354 | * Changed Asio's SSL wrapper to respect OpenSSL's `OPENSSL_NO_ENGINE` feature | |
355 | test `#define` ([@https://svn.boost.org/trac/boost/ticket/6432 #6432]). | |
356 | * Fixed `windows::object_handle` so that it works with Windows compilers that | |
357 | support C++11 move semantics (such as [^g++]). | |
358 | * Improved the performance of strand rescheduling. | |
359 | * Added support for [^g++] 4.7 when compiling in C++11 mode | |
360 | ([@https://svn.boost.org/trac/boost/ticket/6620 #6620]). | |
361 | * Fixed a problem where `signal_set` handlers were not being delivered when | |
362 | the `io_service` was constructed with a `concurrency_hint` of 1 | |
363 | ([@https://svn.boost.org/trac/boost/ticket/6657 #6657]). | |
364 | ||
365 | [heading Asio 1.8.0 / Boost 1.49] | |
366 | ||
367 | * Added a new class template `basic_waitable_timer` based around the C++11 clock | |
368 | type requirements. It may be used with the clocks from the C++11 `<chrono>` | |
369 | library facility or, if those are not available, Boost.Chrono. The typedefs | |
370 | `high_resolution_timer`, `steady_timer` and `system_timer` may be used to | |
371 | create timer objects for the standard clock types. | |
372 | * Added a new `windows::object_handle` class for performing waits on Windows | |
373 | kernel objects. Thanks go to Boris Schaeling for contributing substantially | |
374 | to the development of this feature. | |
375 | * On Linux, `connect()` can return EAGAIN in certain circumstances. Remapped | |
376 | this to another error so that it doesn't look like a non-blocking operation | |
377 | ([@https://svn.boost.org/trac/boost/ticket/6048 #6048]). | |
378 | * Fixed a compile error on NetBSD | |
379 | ([@https://svn.boost.org/trac/boost/ticket/6098 #6098]). | |
380 | * Fixed deadlock on Mac OS X | |
381 | ([@https://svn.boost.org/trac/boost/ticket/6275 #6275]). | |
382 | * Fixed a regression in `buffered_write_stream` | |
383 | ([@https://svn.boost.org/trac/boost/ticket/6310 #6310]). | |
384 | * Fixed a non-paged pool "leak" on Windows when an `io_service` is repeatedly | |
385 | run without anything to do | |
386 | ([@https://svn.boost.org/trac/boost/ticket/6321 #6321]). | |
387 | * Reverted earlier change to allow some speculative operations to be performed | |
388 | without holding the lock, as it introduced a race condition in some | |
389 | multithreaded scenarios. | |
390 | * Fixed a bug where the second buffer in an array of two buffers may be ignored | |
391 | if the first buffer is empty. | |
392 | ||
393 | [heading Asio 1.6.1 / Boost 1.48] | |
394 | ||
395 | * Implemented various performance improvements, including: | |
396 | * Using thread-local operation queues in single-threaded use cases (i.e. when | |
397 | `concurrency_hint` is 1) to eliminate a lock/unlock pair. | |
398 | * Allowing some `epoll_reactor` speculative operations to be performed | |
399 | without holding the lock. | |
400 | * Improving locality of reference by performing an `epoll_reactor`'s I/O | |
401 | operation immediately before the corresponding handler is called. This also | |
402 | improves scalability across CPUs when multiple threads are running the | |
403 | `io_service`. | |
404 | * Specialising asynchronous read and write operations for buffer sequences | |
405 | that are arrays (`boost::array` or `std::array`) of exactly two buffers. | |
406 | * Fixed a compile error in the regex overload of `async_read_until` | |
407 | ([@https://svn.boost.org/trac/boost/ticket/5688 #5688]). | |
408 | * Fixed a Windows-specific compile error by explicitly specifying the | |
409 | `signal()` function from the global namespace | |
410 | ([@https://svn.boost.org/trac/boost/ticket/5722 #5722]). | |
411 | * Changed the `deadline_timer` implementation so that it does not read the | |
412 | clock unless the timer heap is non-empty. | |
413 | * Changed the SSL stream's buffers' sizes so that they are large enough to hold | |
414 | a complete TLS record ([@https://svn.boost.org/trac/boost/ticket/5854 #5854]). | |
415 | * Fixed the behaviour of the synchronous `null_buffers` operations so that they | |
416 | obey the user's non-blocking setting | |
417 | ([@https://svn.boost.org/trac/boost/ticket/5756 #5756]). | |
418 | * Changed to set the size of the select `fd_set` at runtime when using Windows. | |
419 | * Disabled an MSVC warning due to const qualifier being applied to function type. | |
420 | * Fixed a crash that occurs when using the Intel C++ compiler | |
421 | ([@https://svn.boost.org/trac/boost/ticket/5763 #5763]). | |
422 | * Changed the initialisation of the OpenSSL library so that it supports all | |
423 | available algorithms. | |
424 | * Fixed the SSL error mapping used when the session is gracefully shut down. | |
425 | * Added some latency test programs. | |
426 | * Clarified that a read operation ends when the buffer is full | |
427 | ([@https://svn.boost.org/trac/boost/ticket/5999 #5999]). | |
428 | * Fixed an exception safety issue in `epoll_reactor` initialisation | |
429 | ([@https://svn.boost.org/trac/boost/ticket/6006 #6006]). | |
430 | * Made the number of strand implementations configurable by defining | |
431 | `BOOST_ASIO_STRAND_IMPLEMENTATIONS` to the desired number. | |
432 | * Added support for a new `BOOST_ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION` flag | |
433 | which switches the allocation of strand implementations to use a round-robin | |
434 | approach rather than hashing. | |
435 | * Fixed potential strand starvation issue that can occur when `strand.post()` | |
436 | is used. | |
437 | ||
438 | [heading Asio 1.6.0 / Boost 1.47] | |
439 | ||
440 | * Added support for signal handling, using a new class called `signal_set`. | |
441 | Programs may add one or more signals to the set, and then perform an | |
442 | `async_wait()` operation. The specified handler will be called when one of | |
443 | the signals occurs. The same signal number may be registered with multiple | |
444 | `signal_set` objects, however the signal number must be used only with Asio. | |
445 | Addresses [@https://svn.boost.org/trac/boost/ticket/2879 #2879]. | |
446 | * Added handler tracking, a new debugging aid. When enabled by defining | |
447 | `BOOST_ASIO_ENABLE_HANDLER_TRACKING`, Asio writes debugging output to the | |
448 | standard error stream. The output records asynchronous operations and the | |
449 | relationships between their handlers. It may be post-processed using the | |
450 | included [^handlerviz.pl] tool to create a visual representation of the | |
451 | handlers (requires GraphViz). | |
452 | * Added support for timeouts on socket iostreams, such as `ip::tcp::iostream`. | |
453 | A timeout is set by calling `expires_at()` or `expires_from_now()` to | |
454 | establish a deadline. Any socket operations which occur past the deadline | |
455 | will put the iostream into a bad state. | |
456 | * Added a new `error()` member function to socket iostreams, for retrieving the | |
457 | error code from the most recent system call. | |
458 | * Added a new `basic_deadline_timer::cancel_one()` function. This function lets | |
459 | you cancel a single waiting handler on a timer. Handlers are cancelled in | |
460 | FIFO order. | |
461 | * Added a new `transfer_exactly()` completion condition. This can be used to | |
462 | send or receive a specified number of bytes even if the total size of the | |
463 | buffer (or buffer sequence) is larger. | |
464 | * Added new free functions `connect()` and `async_connect()`. These operations | |
465 | try each endpoint in a list until the socket is successfully connected, and | |
466 | are useful for creating TCP clients that work with both IPv4 and IPv6. | |
467 | * Extended the `buffer_size()` function so that it works for buffer sequences | |
468 | in addition to individual buffers. | |
469 | * Added a new `buffer_copy()` function that can be used to copy the raw bytes | |
470 | between individual buffers and buffer sequences. | |
471 | * Added new non-throwing overloads of `read()`, `read_at()`, `write()` and | |
472 | `write_at()` that do not require a completion condition. | |
473 | * Added friendlier compiler errors for when a completion handler does not meet | |
474 | the necessary type requirements. When C++0x is available (currently supported | |
475 | for [^g++] 4.5 or later, and MSVC 10), `static_assert` is also used to | |
476 | generate an informative error message. This checking may be disabled by | |
477 | defining `BOOST_ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS`. | |
478 | * Added a new, completely rewritten SSL implementation. The new implementation | |
479 | compiles faster, shows substantially improved performance, and supports | |
480 | custom memory allocation and handler invocation. It includes new API features | |
481 | such as certificate verification callbacks and has improved error reporting. | |
482 | The new implementation is source-compatible with the old for most uses. | |
483 | However, if necessary, the old implementation may still be used by defining | |
484 | `BOOST_ASIO_ENABLE_OLD_SSL`. | |
485 | Addresses [@https://svn.boost.org/trac/boost/ticket/3702 #3702], | |
486 | [@https://svn.boost.org/trac/boost/ticket/3958 #3958]. | |
487 | * Changed the separate compilation support such that, to use Asio's SSL | |
488 | capabilities, you should also include `boost/asio/ssl/impl/src.hpp` in one | |
489 | source file in your program. | |
490 | * Changed the SSL implementation to support build environments where SSL v2 is | |
491 | explicitly disabled ([@https://svn.boost.org/trac/boost/ticket/5453 #5453]). | |
492 | * Made the `is_loopback()`, `is_unspecified()` and `is_multicast()` functions | |
493 | consistently available across the `ip::address`, `ip::address_v4` and | |
494 | `ip::address_v6` classes | |
495 | ([@https://svn.boost.org/trac/boost/ticket/3939 #3939]). | |
496 | * Added new `non_blocking()` functions for managing the non-blocking behaviour | |
497 | of a socket or descriptor. The `io_control()` commands named `non_blocking_io` | |
498 | are now deprecated in favour of these new functions. | |
499 | * Added new `native_non_blocking()` functions for managing the non-blocking | |
500 | mode of the underlying socket or descriptor. These functions are intended to | |
501 | allow the encapsulation of arbitrary non-blocking system calls as | |
502 | asynchronous operations, in a way that is transparent to the user of the | |
503 | socket object. The functions have no effect on the behaviour of the | |
504 | synchronous operations of the socket or descriptor. | |
505 | * Added the `io_control()` member function for socket acceptors | |
506 | ([@https://svn.boost.org/trac/boost/ticket/3297 #3297]). | |
507 | * Added a `release()` member function to posix descriptors. This function | |
508 | releases ownership of the underlying native descriptor to the caller. | |
509 | Addresses [@https://svn.boost.org/trac/boost/ticket/3900 #3900]. | |
510 | * Added support for sequenced packet sockets (`SOCK_SEQPACKET`). | |
511 | * Added a new `io_service::stopped()` function that can be used to determine | |
512 | whether the `io_service` has stopped (i.e. a `reset()` call is needed prior | |
513 | to any further calls to `run()`, `run_one()`, `poll()` or `poll_one()`). | |
514 | * For consistency with the C++0x standard library, deprecated the `native_type` | |
515 | typedefs in favour of `native_handle_type`, and the `native()` member | |
516 | functions in favour of `native_handle()`. | |
517 | * Added support for C++0x move construction and assignment to sockets, serial | |
518 | ports, POSIX descriptors and Windows handles. | |
519 | * Reduced the copying of handler function objects. | |
520 | * Added support for C++0x move construction to further reduce (and in some | |
521 | cases eliminate) copying of handler objects. | |
522 | * Added support for the `fork()` system call. Programs that use `fork()` must | |
523 | call `io_service.notify_fork()` at the appropriate times. Two new examples | |
524 | have been added showing how to use this feature. Addresses | |
525 | [@https://svn.boost.org/trac/boost/ticket/3238 #3238], | |
526 | [@https://svn.boost.org/trac/boost/ticket/4162 #4162]. | |
527 | * Cleaned up the handling of errors reported by the `close()` system call. In | |
528 | particular, assume that most operating systems won't have `close()` fail with | |
529 | `EWOULDBLOCK`, but if it does then set the blocking mode and restart the call. | |
530 | If any other error occurs, assume the descriptor is closed. Addresses | |
531 | [@https://svn.boost.org/trac/boost/ticket/3307 #3307]. | |
532 | * Added new `asio::buffer()` overloads for `std::array`, when available. | |
533 | * Changed the implementation to use the C++0x standard library templates | |
534 | `array`, `shared_ptr`, `weak_ptr` and `atomic` when they are available, | |
535 | rather than the Boost equivalents. | |
536 | * Use C++0x variadic templates when available, rather than generating function | |
537 | overloads using Boost.Preprocessor. | |
538 | * Changed exception reporting to include the function name in exception `what()` | |
539 | messages. | |
540 | * Fixed insufficient initialisers warning with MinGW. | |
541 | * Changed the `shutdown_service()` member functions to be private. | |
542 | * Added archetypes for testing socket option functions. | |
543 | * Changed the Boost.Asio examples so that they don't use Boost.Thread's | |
544 | convenience header. Use the header file that is specifically for the | |
545 | boost::thread class instead. | |
546 | * Removed the dependency on OS-provided macros for the well-known IPv4 and IPv6 | |
547 | addresses. This should eliminate annoying "missing braces around initializer" | |
548 | warnings ([@https://svn.boost.org/trac/boost/ticket/3741 #3741]). | |
549 | * Reduced the size of `ip::basic_endpoint<>` objects (such as | |
550 | `ip::tcp::endpoint` and `ip::udp::endpoint`). | |
551 | * Changed the reactor backends to assume that any descriptors or sockets added | |
552 | using `assign()` may have been `dup()`-ed, and so require explicit | |
553 | deregistration from the reactor | |
554 | ([@https://svn.boost.org/trac/boost/ticket/4971 #4971]). | |
555 | * Removed the deprecated member functions named `io_service()`. The | |
556 | `get_io_service()` member functions should be used instead. | |
557 | * Removed the deprecated typedefs `resolver_query` and `resolver_iterator` from | |
558 | the `ip::tcp`, `ip::udp` and `ip::icmp` classes. | |
559 | * Modified the `buffers_iterator<>` and `ip::basic_resolver_iterator` classes | |
560 | so that the value_type typedefs are non-const byte types. | |
561 | * Fixed warnings reported by g++'s [^-Wshadow] compiler option | |
562 | ([@https://svn.boost.org/trac/boost/ticket/3905 #3905]). | |
563 | * Added an explicit cast to convert the `FIONBIO` constant to int, to suppress | |
564 | a compiler warning on some platforms | |
565 | ([@https://svn.boost.org/trac/boost/ticket/5128 #5128]). | |
566 | * Changed most examples to treat a failure by an accept operation as non-fatal | |
567 | ([@https://svn.boost.org/trac/boost/ticket/5124 #5124]). | |
568 | * Fixed an error in the [^tick_count_timer] example by making the duration type | |
569 | signed. Previously, a wait on an already-passed deadline would not return for | |
570 | a very long time ([@https://svn.boost.org/trac/boost/ticket/5418 #5418]). | |
571 | ||
572 | [heading Asio 1.4.9 / Boost 1.46.1] | |
573 | ||
574 | * `EV_ONESHOT` seems to cause problems on some versions of Mac OS X, with the | |
575 | `io_service` destructor getting stuck inside the `close()` system call. | |
576 | Changed the kqueue backend to use `EV_CLEAR` instead | |
577 | ([@https://svn.boost.org/trac/boost/ticket/5021 #5021]). | |
578 | * Fixed compile failures with some versions of [^g++] due to the use of | |
579 | anonymous enums ([@https://svn.boost.org/trac/boost/ticket/4883 #4883]). | |
580 | * Fixed a bug on kqueue-based platforms, where some system calls that | |
581 | repeatedly fail with `EWOULDBLOCK` are not correctly re-registered with | |
582 | kqueue. | |
583 | * Changed `asio::streambuf` to ensure that its internal pointers are updated | |
584 | correctly after the data has been modified using `std::streambuf` member | |
585 | functions. | |
586 | * Fixed a bug that prevented the linger socket option from working on platforms | |
587 | other than Windows. | |
588 | ||
589 | [heading Asio 1.4.8 / Boost 1.46] | |
590 | ||
591 | * Fixed an integer overflow problem that occurs when | |
592 | `ip::address_v4::broadcast()` is used on 64-bit platforms. | |
593 | * Fixed a problem on older Linux kernels (where epoll is used without timerfd | |
594 | support) that prevents timely delivery of deadline_timer handlers, after the | |
595 | program has been running for some time | |
596 | ([@https://svn.boost.org/trac/boost/ticket/5045 #5045]). | |
597 | ||
598 | [heading Asio 1.4.7 / Boost 1.45] | |
599 | ||
600 | * Fixed a problem on kqueue-based platforms where a `deadline_timer` may | |
601 | never fire if the `io_service` is running in a background thread | |
602 | ([@https://svn.boost.org/trac/boost/ticket/4568 #4568]). | |
603 | * Fixed a const-correctness issue that prevented valid uses of | |
604 | `has_service<>` from compiling | |
605 | ([@https://svn.boost.org/trac/boost/ticket/4638 #4638]). | |
606 | * Fixed MinGW cross-compilation | |
607 | ([@https://svn.boost.org/trac/boost/ticket/4491 #4491]). | |
608 | * Removed dependency on deprecated Boost.System functions | |
609 | ([@https://svn.boost.org/trac/boost/ticket/4672 #4672]). | |
610 | * Ensured `close()`\/`closesocket()` failures are correctly propagated | |
611 | ([@https://svn.boost.org/trac/boost/ticket/4573 #4573]). | |
612 | * Added a check for errors returned by `InitializeCriticalSectionAndSpinCount` | |
613 | ([@https://svn.boost.org/trac/boost/ticket/4574 #4574]). | |
614 | * Added support for hardware flow control on QNX | |
615 | ([@https://svn.boost.org/trac/boost/ticket/4625 #4625]). | |
616 | * Always use `pselect()` on HP-UX, if it is available | |
617 | ([@https://svn.boost.org/trac/boost/ticket/4578 #4578]). | |
618 | * Ensured handler arguments are passed as lvalues | |
619 | ([@https://svn.boost.org/trac/boost/ticket/4744 #4744]). | |
620 | * Fixed Windows build when thread support is disabled | |
621 | ([@https://svn.boost.org/trac/boost/ticket/4680 #4680]). | |
622 | * Fixed a Windows-specific problem where `deadline_timer` objects with expiry | |
623 | times set more than 5 minutes in the future may never expire | |
624 | ([@https://svn.boost.org/trac/boost/ticket/4745 #4745]). | |
625 | * Fixed the `resolver` backend on BSD platforms so that an empty service name | |
626 | resolves to port number `0`, as per the documentation | |
627 | ([@https://svn.boost.org/trac/boost/ticket/4690 #4690]). | |
628 | * Fixed read operations so that they do not accept buffer sequences of type | |
629 | `const_buffers_1` ([@https://svn.boost.org/trac/boost/ticket/4746 #4746]). | |
630 | * Redefined `Protocol` and `id` to avoid clashing with Objective-C++ keywords | |
631 | ([@https://svn.boost.org/trac/boost/ticket/4191 #4191]). | |
632 | * Fixed a `vector` reallocation performance issue that can occur when there are | |
633 | many active `deadline_timer` objects | |
634 | ([@https://svn.boost.org/trac/boost/ticket/4780 #4780]). | |
635 | * Fixed the kqueue backend so that it compiles on NetBSD | |
636 | ([@https://svn.boost.org/trac/boost/ticket/4662 #4662]). | |
637 | * Fixed the socket `io_control()` implementation on 64-bit Mac OS X and BSD | |
638 | platforms ([@https://svn.boost.org/trac/boost/ticket/4782 #4782]). | |
639 | * Fixed a Windows-specific problem where failures from `accept()` are | |
640 | incorrectly treated as successes | |
641 | ([@https://svn.boost.org/trac/boost/ticket/4859 #4859]). | |
642 | * Deprecated the separate compilation header `<boost/asio/impl/src.cpp>` in | |
643 | favour of `<boost/asio/impl/src.hpp>` | |
644 | ([@https://svn.boost.org/trac/boost/ticket/4560 #4560]). | |
645 | ||
646 | [heading Asio 1.4.6 / Boost 1.44] | |
647 | ||
648 | * Reduced compile times. (Note that some programs may need to add additional | |
649 | `#include`s, e.g. if the program uses `boost::array` but does not explicitly | |
650 | include `<boost/array.hpp>`.) | |
651 | * Reduced the size of generated code. | |
652 | * Refactored `deadline_timer` implementation to improve performance. | |
653 | * Improved multiprocessor scalability on Windows by using a dedicated hidden | |
654 | thread to wait for timers. | |
655 | * Improved performance of `asio::streambuf` with `async_read()` and | |
656 | `async_read_until()`. These read operations now use the existing capacity of | |
657 | the `streambuf` when reading, rather than limiting the read to 512 bytes. | |
658 | * Added optional separate compilation. To enable, add | |
659 | `#include <boost/asio/impl/src.cpp>` to one source file in a program, then | |
660 | build the program with `BOOST_ASIO_SEPARATE_COMPILATION` defined in the | |
661 | project\/compiler settings. Alternatively, `BOOST_ASIO_DYN_LINK` may be | |
662 | defined to build a separately-compiled Asio as part of a shared library. | |
663 | * Added new macro `BOOST_ASIO_DISABLE_FENCED_BLOCK` to permit the disabling of | |
664 | memory fences around completion handlers, even if thread support is enabled. | |
665 | * Reworked timeout examples to better illustrate typical use cases. | |
666 | * Ensured that handler arguments are passed as `const` types. | |
667 | * Fixed incorrect parameter order in `null_buffers` variant of `async_send_to` | |
668 | ([@https://svn.boost.org/trac/boost/ticket/4170 #4170]). | |
669 | * Ensured `unsigned char` is used with `isdigit` in `getaddrinfo` emulation | |
670 | ([@https://svn.boost.org/trac/boost/ticket/4201 #4201]). | |
671 | * Fixed handling of very small but non-zero timeouts | |
672 | ([@https://svn.boost.org/trac/boost/ticket/4205 #4205]). | |
673 | * Fixed crash that occurred when an empty buffer sequence was passed to a | |
674 | composed read or write operation. | |
675 | * Added missing `operator+` overload in `buffers_iterator` | |
676 | ([@https://svn.boost.org/trac/boost/ticket/4382 #4382]). | |
677 | * Implemented cancellation of `null_buffers` operations on Windows. | |
678 | ||
679 | [heading Asio 1.4.5 / Boost 1.43] | |
680 | ||
681 | * Improved performance. | |
682 | * Reduced compile times. | |
683 | * Reduced the size of generated code. | |
684 | * Extended the guarantee that background threads don't call user code to all | |
685 | asynchronous operations | |
686 | ([@https://svn.boost.org/trac/boost/ticket/3923 #3923]). | |
687 | * Changed to use edge-triggered epoll on Linux. | |
688 | * Changed to use `timerfd` for dispatching timers on Linux, when available. | |
689 | * Changed to use one-shot notifications with kqueue on Mac OS X and BSD | |
690 | platforms. | |
691 | * Added a bitmask type `ip::resolver_query_base::flags` as per the TR2 proposal. | |
692 | This type prevents implicit conversion from `int` to `flags`, allowing the | |
693 | compiler to catch cases where users incorrectly pass a numeric port number as | |
694 | the service name. | |
695 | * Added `#define NOMINMAX` for all Windows compilers. Users can define | |
696 | `BOOST_ASIO_NO_NOMINMAX` to suppress this definition | |
697 | ([@https://svn.boost.org/trac/boost/ticket/3901 #3901]). | |
698 | * Fixed a bug where 0-byte asynchronous reads were incorrectly passing an | |
699 | `error::eof` result to the completion handler | |
700 | ([@https://svn.boost.org/trac/boost/ticket/4023 #4023]). | |
701 | * Changed the `io_control()` member functions to always call `ioctl` on the | |
702 | underlying descriptor when modifying blocking mode | |
703 | ([@https://svn.boost.org/trac/boost/ticket/3307 #3307]). | |
704 | * Changed the resolver implementation to longer require the typedefs | |
705 | `InternetProtocol::resolver_query` and `InternetProtocol::resolver_iterator`, | |
706 | as neither typedef is part of the documented `InternetProtocol` requirements. | |
707 | The corresponding typedefs in the `ip::tcp`, `ip::udp` and `ip::icmp` classes | |
708 | have been deprecated. | |
709 | * Fixed out-of-band handling for reactors not based on `select()`. | |
710 | * Added new `BOOST_ASIO_DISABLE_THREADS` macro that allows Asio's threading | |
711 | support to be independently disabled. | |
712 | * Minor documentation improvements. | |
713 | ||
714 | [heading Asio 1.4.4 / Boost 1.42] | |
715 | ||
716 | * Added a new HTTP Server 4 example illustrating the use of stackless coroutines | |
717 | with Asio. | |
718 | * Changed handler allocation and invocation to use `boost::addressof` to get the | |
719 | address of handler objects, rather than applying `operator&` directly | |
720 | ([@https://svn.boost.org/trac/boost/ticket/2977 #2977]). | |
721 | * Restricted MSVC buffer debugging workaround to 2008, as it causes a crash with | |
722 | 2010 beta 2 ([@https://svn.boost.org/trac/boost/ticket/3796 #3796], | |
723 | [@https://svn.boost.org/trac/boost/ticket/3822 #3822]). | |
724 | * Fixed a problem with the lifetime of handler memory, where Windows needs the | |
725 | `OVERLAPPED` structure to be valid until both the initiating function call | |
726 | has returned and the completion packet has been delivered. | |
727 | * Don't block signals while performing system calls, but instead restart the | |
728 | calls if they are interrupted. | |
729 | * Documented the guarantee made by strand objects with respect to order of | |
730 | handler invocation. | |
731 | * Changed strands to use a pool of implementations, to make copying of strands | |
732 | cheaper. | |
733 | * Ensured that kqueue support is enabled for BSD platforms | |
734 | ([@https://svn.boost.org/trac/boost/ticket/3626 #3626]). | |
735 | * Added a `boost_` prefix to the `extern "C"` thread entry point function | |
736 | ([@https://svn.boost.org/trac/boost/ticket/3809 #3809]). | |
737 | * In `getaddrinfo` emulation, only check the socket type (`SOCK_STREAM` or | |
738 | `SOCK_DGRAM`) if a service name has been specified. This should allow the | |
739 | emulation to work with raw sockets. | |
740 | * Added a workaround for some broken Windows firewalls that make a socket | |
741 | appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1. | |
742 | * Applied a fix for reported excessive CPU usage under Solaris | |
743 | ([@https://svn.boost.org/trac/boost/ticket/3670 #3670]). | |
744 | * Added some support for platforms that use older compilers such as g++ 2.95 | |
745 | ([@https://svn.boost.org/trac/boost/ticket/3743 #3743]). | |
746 | ||
747 | [heading Asio 1.4.3 / Boost 1.40] | |
748 | ||
749 | * Added a new ping example to illustrate the use of ICMP sockets. | |
750 | * Changed the `buffered*_stream<>` templates to treat 0-byte reads and writes as | |
751 | no-ops, to comply with the documented type requirements for `SyncReadStream`, | |
752 | `AsyncReadStream`, `SyncWriteStream` and `AsyncWriteStream`. | |
753 | * Changed some instances of the `throw` keyword to `boost::throw_exception()` to | |
754 | allow Asio to be used when exception support is disabled. Note that the SSL | |
755 | wrappers still require exception support | |
756 | ([@https://svn.boost.org/trac/boost/ticket/2754 #2754]). | |
757 | * Made Asio compatible with the OpenSSL 1.0 beta | |
758 | ([@https://svn.boost.org/trac/boost/ticket/3256 #3256]). | |
759 | * Eliminated a redundant system call in the Solaris [^/dev/poll] backend. | |
760 | * Fixed a bug in resizing of the bucket array in the internal hash maps | |
761 | ([@https://svn.boost.org/trac/boost/ticket/3095 #3095]). | |
762 | * Ensured correct propagation of the error code when a synchronous accept fails | |
763 | ([@https://svn.boost.org/trac/boost/ticket/3216 #3216]). | |
764 | * Ensured correct propagation of the error code when a synchronous read or | |
765 | write on a Windows HANDLE fails. | |
766 | * Fixed failures reported when `_GLIBCXX_DEBUG` is defined | |
767 | ([@https://svn.boost.org/trac/boost/ticket/3098 #3098]). | |
768 | * Fixed custom memory allocation support for timers | |
769 | ([@https://svn.boost.org/trac/boost/ticket/3107 #3107]). | |
770 | * Tidied up various warnings reported by g++ | |
771 | ([@https://svn.boost.org/trac/boost/ticket/1341 #1341], | |
772 | [@https://svn.boost.org/trac/boost/ticket/2618 #2618]). | |
773 | * Various documentation improvements, including more obvious hyperlinks to | |
774 | function overloads, header file information, examples for the handler type | |
775 | requirements, and adding enum values to the index | |
776 | ([@https://svn.boost.org/trac/boost/ticket/3157 #3157], | |
777 | [@https://svn.boost.org/trac/boost/ticket/2620 #2620]). | |
778 | ||
779 | [heading Asio 1.4.2 / Boost 1.39] | |
780 | ||
781 | * Implement automatic resizing of the bucket array in the internal hash maps. | |
782 | This is to improve performance for very large numbers of asynchronous | |
783 | operations and also to reduce memory usage for very small numbers. A new | |
784 | macro `BOOST_ASIO_HASH_MAP_BUCKETS` may be used to tweak the sizes used for | |
785 | the bucket arrays. (N.B. this feature introduced a bug which was fixed in | |
786 | Asio 1.4.3 / Boost 1.40.) | |
787 | * Add performance optimisation for the Windows IOCP backend for when no timers | |
788 | are used. | |
789 | * Prevent locale settings from affecting formatting of TCP and UDP endpoints | |
790 | ([@https://svn.boost.org/trac/boost/ticket/2682 #2682]). | |
791 | * Fix a memory leak that occurred when an asynchronous SSL operation's | |
792 | completion handler threw an exception | |
793 | ([@https://svn.boost.org/trac/boost/ticket/2910 #2910]). | |
794 | * Fix the implementation of `io_control()` so that it adheres to the | |
795 | documented type requirements for IoControlCommand | |
796 | ([@https://svn.boost.org/trac/boost/ticket/2820 #2820]). | |
797 | * Fix incompatibility between Asio and ncurses.h | |
798 | ([@https://svn.boost.org/trac/boost/ticket/2156 #2156]). | |
799 | * On Windows, specifically handle the case when an overlapped `ReadFile` call | |
800 | fails with `ERROR_MORE_DATA`. This enables a hack where a | |
801 | `windows::stream_handle` can be used with a message-oriented named pipe | |
802 | ([@https://svn.boost.org/trac/boost/ticket/2936 #2936]). | |
803 | * Fix system call wrappers to always clear the error on success, as POSIX | |
804 | allows successful system calls to modify errno | |
805 | ([@https://svn.boost.org/trac/boost/ticket/2953 #2953]). | |
806 | * Don't include termios.h if `BOOST_ASIO_DISABLE_SERIAL_PORT` is defined | |
807 | ([@https://svn.boost.org/trac/boost/ticket/2917 #2917]). | |
808 | * Cleaned up some more MSVC level 4 warnings | |
809 | ([@https://svn.boost.org/trac/boost/ticket/2828 #2828]). | |
810 | * Various documentation fixes | |
811 | ([@https://svn.boost.org/trac/boost/ticket/2871 #2871]). | |
812 | ||
813 | [heading Asio 1.4.1 / Boost 1.38] | |
814 | ||
815 | * Improved compatibility with some Windows firewall software. | |
816 | * Ensured arguments to `windows::overlapped_ptr::complete()` are correctly | |
817 | passed to the completion handler | |
818 | ([@https://svn.boost.org/trac/boost/ticket/2614 #2614]). | |
819 | * Fixed a link problem and multicast failure on QNX | |
820 | ([@https://svn.boost.org/trac/boost/ticket/2504 #2504], | |
821 | [@https://svn.boost.org/trac/boost/ticket/2530 #2530]). | |
822 | * Fixed a compile error in SSL support on MinGW / g++ 3.4.5. | |
823 | * Drop back to using a pipe for notification if eventfd is not available at | |
824 | runtime on Linux ([@https://svn.boost.org/trac/boost/ticket/2683 #2683]). | |
825 | * Various minor bug and documentation fixes | |
826 | ([@https://svn.boost.org/trac/boost/ticket/2534 #2534], | |
827 | [@https://svn.boost.org/trac/boost/ticket/2541 #2541], | |
828 | [@https://svn.boost.org/trac/boost/ticket/2607 #2607], | |
829 | [@https://svn.boost.org/trac/boost/ticket/2617 #2617], | |
830 | [@https://svn.boost.org/trac/boost/ticket/2619 #2619]). | |
831 | ||
832 | [heading Asio 1.4.0 / Boost 1.37] | |
833 | ||
834 | * Enhanced CompletionCondition concept with the signature | |
835 | `size_t CompletionCondition(error_code ec, size_t total)`, where the return | |
836 | value indicates the maximum number of bytes to be transferred on the next | |
837 | read or write operation. (The old CompletionCondition signature is still | |
838 | supported for backwards compatibility). | |
839 | * New windows::overlapped_ptr class to allow arbitrary overlapped I/O | |
840 | functions (such as TransmitFile) to be used with Asio. | |
841 | * On recent versions of Linux, an eventfd descriptor is now used (rather than | |
842 | a pipe) to interrupt a blocked select/epoll reactor. | |
843 | * Added const overloads of lowest_layer(). | |
844 | * Synchronous read, write, accept and connect operations are now thread safe | |
845 | (meaning that it is now permitted to perform concurrent synchronous | |
846 | operations on an individual socket, if supported by the OS). | |
847 | * Reactor-based io_service implementations now use lazy initialisation to | |
848 | reduce the memory usage of an io_service object used only as a message | |
849 | queue. | |
850 | ||
851 | [heading Asio 1.2.0 / Boost 1.36] | |
852 | ||
853 | * Added support for serial ports. | |
854 | * Added support for UNIX domain sockets. | |
855 | * Added support for raw sockets and ICMP. | |
856 | * Added wrappers for POSIX stream-oriented file descriptors (excluding regular | |
857 | files). | |
858 | * Added wrappers for Windows stream-oriented `HANDLE`s such as named pipes | |
859 | (requires `HANDLE`s that work with I/O completion ports). | |
860 | * Added wrappers for Windows random-access `HANDLE`s such as files (requires | |
861 | `HANDLE`s that work with I/O completion ports). | |
862 | * Added support for reactor-style operations (i.e. they report readiness but | |
863 | perform no I/O) using a new `null_buffers` type. | |
864 | * Added an iterator type for bytewise traversal of buffer sequences. | |
865 | * Added new `read_until()` and `async_read_until()` overloads that take a | |
866 | user-defined function object for locating message boundaries. | |
867 | * Added an experimental two-lock queue (enabled by defining | |
868 | `BOOST_ASIO_ENABLE_TWO_LOCK_QUEUE`) that may provide better `io_service` | |
869 | scalability across many processors. | |
870 | * Various fixes, performance improvements, and more complete coverage of the | |
871 | custom memory allocation support. | |
872 | ||
873 | [heading Asio 1.0.0 / Boost 1.35] | |
874 | ||
875 | First release of Asio as part of Boost. | |
876 | ||
877 | [endsect] |