1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543 |
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
- <title>Revision History</title>
- <link rel="stylesheet" href="../boostbook.css" type="text/css">
- <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
- <link rel="home" href="../index.html" title="Asio">
- <link rel="up" href="../index.html" title="Asio">
- <link rel="prev" href="reference/yield_context.html" title="yield_context">
- <link rel="next" href="index.html" title="">
- </head>
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
- <table cellpadding="2" width="100%"><tr><td valign="top"><img alt="asio C++ library" width="250" height="60" src="../asio.png"></td></tr></table>
- <hr>
- <div class="spirit-nav">
- <a accesskey="p" href="reference/yield_context.html"><img src="../prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../home.png" alt="Home"></a><a accesskey="n" href="index.html"><img src="../next.png" alt="Next"></a>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h2 class="title" style="clear: both">
- <a name="asio.history"></a><a class="link" href="history.html" title="Revision History">Revision History</a>
- </h2></div></div></div>
- <h4>
- <a name="asio.history.h0"></a>
- <span><a name="asio.history.asio_1_10_2"></a></span><a class="link" href="history.html#asio.history.asio_1_10_2">Asio
- 1.10.2</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Fixed <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">spawn</span><span class="special">()</span></code>
- to work correctly with new Boost.Coroutine interface.
- </li>
- <li class="listitem">
- Ensured that incomplete <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">spawn</span><span class="special">()</span></code> coroutines are correctly unwound when
- cleaned up by the <code class="computeroutput"><span class="identifier">io_service</span></code>
- destructor.
- </li>
- <li class="listitem">
- Fixed delegation of continuation hook for handlers produced by <code class="computeroutput"><span class="identifier">io_service</span><span class="special">::</span><span class="identifier">wrap</span><span class="special">()</span></code>
- and <code class="computeroutput"><span class="identifier">strand</span><span class="special">::</span><span class="identifier">wrap</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Changed the Windows I/O completion port backend to use <code class="computeroutput"><span class="identifier">ConnectEx</span></code>,
- if available, for connection-oriented IP sockets.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">io_service</span></code>
- backend for non-Windows (and non-IOCP Windows) platforms to use a single
- condition variable per <code class="computeroutput"><span class="identifier">io_service</span></code>
- instance. This addresses a potential race condition when <code class="computeroutput"><span class="identifier">run_one</span><span class="special">()</span></code>
- is used from multiple threads.
- </li>
- <li class="listitem">
- Prevented integer overflow when computing timeouts based on some <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">chrono</span></code>
- clocks.
- </li>
- <li class="listitem">
- Made further changes to <code class="computeroutput"><span class="identifier">EV_CLEAR</span></code>
- handling in the kqueue backend, to address other cases where the <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code>
- system call may hang on Mac OS X.
- </li>
- <li class="listitem">
- Fixed infinite recursion in implementation of <code class="computeroutput"><span class="identifier">resolver_query_base</span><span class="special">::</span><span class="identifier">flags</span><span class="special">::</span><span class="keyword">operator</span><span class="special">~</span></code>.
- </li>
- <li class="listitem">
- Made the <code class="computeroutput"><span class="identifier">select</span></code> reactor
- more efficient on Windows for large numbers of sockets.
- </li>
- <li class="listitem">
- Fixed a Windows-specific type-aliasing issue reported by <code class="literal">gcc</code>.
- </li>
- <li class="listitem">
- Prevented execution of compile-time-only buffer test to avoid triggering
- an address sanitiser warning.
- </li>
- <li class="listitem">
- Disabled the <code class="computeroutput"><span class="identifier">GetQueuedCompletionStatus</span></code>
- timeout workaround on recent versions of Windows.
- </li>
- <li class="listitem">
- Changed implementation for Windows Runtime to use <code class="computeroutput"><span class="identifier">FormatMessageW</span></code>
- rather than <code class="computeroutput"><span class="identifier">FormatMessageA</span></code>,
- as the Windows store does not permit the latter.
- </li>
- <li class="listitem">
- Added support for string-based scope IDs when using link-local multicast
- addresses.
- </li>
- <li class="listitem">
- Changed IPv6 multicast group join to use the address's scope ID as the
- interface, if an interface is not explicitly specified.
- </li>
- <li class="listitem">
- Fixed multicast test failure on Mac OS X and the BSDs by using a link-local
- multicast address.
- </li>
- <li class="listitem">
- Various minor documentation improvements.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h1"></a>
- <span><a name="asio.history.asio_1_10_1"></a></span><a class="link" href="history.html#asio.history.asio_1_10_1">Asio
- 1.10.1</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Implemented a limited port to Windows Runtime. This support requires that
- the language extensions be enabled. Due to the restricted facilities exposed
- by the Windows Runtime API, the port also comes with the following caveats:
- <div class="itemizedlist"><ul class="itemizedlist" type="circle">
- <li class="listitem">
- The core facilities such as the <code class="computeroutput"><span class="identifier">io_service</span></code>,
- <code class="computeroutput"><span class="identifier">strand</span></code>, buffers,
- composed operations, timers, etc., should all work as normal.
- </li>
- <li class="listitem">
- For sockets, only client-side TCP is supported.
- </li>
- <li class="listitem">
- Explicit binding of a client-side TCP socket is not supported.
- </li>
- <li class="listitem">
- The <code class="computeroutput"><span class="identifier">cancel</span><span class="special">()</span></code>
- function is not supported for sockets. Asynchronous operations may
- only be cancelled by closing the socket.
- </li>
- <li class="listitem">
- Operations that use <code class="computeroutput"><span class="identifier">null_buffers</span></code>
- are not supported.
- </li>
- <li class="listitem">
- Only <code class="computeroutput"><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">no_delay</span></code> and <code class="computeroutput"><span class="identifier">socket_base</span><span class="special">::</span><span class="identifier">keep_alive</span></code>
- options are supported.
- </li>
- <li class="listitem">
- Resolvers do not support service names, only numbers. I.e. you must
- use "80" rather than "http".
- </li>
- <li class="listitem">
- Most resolver query flags have no effect.
- </li>
- </ul></div>
- </li>
- <li class="listitem">
- 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 <code class="computeroutput"><span class="identifier">ASIO_STANDALONE</span></code>
- on your compiler command line or as part of the project options. This standalone
- configuration has been tested for the following platforms and compilers:
- <div class="itemizedlist"><ul class="itemizedlist" type="circle">
- <li class="listitem">
- Microsoft Visual Studio 2012
- </li>
- <li class="listitem">
- Linux with g++ 4.7 or 4.8 (requires <code class="literal">-std=c++11</code>)
- </li>
- <li class="listitem">
- Mac OS X with clang++ / Xcode 4.6 (requires <code class="literal">-std=c++11 -stdlib=libc++</code>)
- </li>
- </ul></div>
- </li>
- <li class="listitem">
- Fixed a regression (introduced in 1.10.0) where, on some platforms, errors
- from <code class="computeroutput"><span class="identifier">async_connect</span></code> were
- not correctly propagated through to the completion handler.
- </li>
- <li class="listitem">
- Fixed a Windows-specific regression (introduced in 1.10.0) that occurs
- when multiple threads are running an <code class="computeroutput"><span class="identifier">io_service</span></code>.
- When the bug occurs, the result of an asynchronous operation (error and
- bytes tranferred) is incorrectly discarded and zero values used instead.
- For TCP sockets this results in spurious end-of-file notifications.
- </li>
- <li class="listitem">
- Fixed a bug in handler tracking, where it was not correctly printing out
- some handler IDs.
- </li>
- <li class="listitem">
- Fixed the comparison used to test for successful synchronous accept operations
- so that it works correctly with unsigned socket descriptors.
- </li>
- <li class="listitem">
- Ensured the signal number is correctly passed to the completion handler
- when starting an <code class="computeroutput"><span class="identifier">async_wait</span></code>
- on a signal that is already raised.
- </li>
- <li class="listitem">
- Suppressed a g++ 4.8+ warning about unused typedefs.
- </li>
- <li class="listitem">
- Enabled the move optimisation for handlers that use the default invocation
- hook.
- </li>
- <li class="listitem">
- Clarified that programs must not issue overlapping <code class="computeroutput"><span class="identifier">async_write_at</span></code>
- operations.
- </li>
- <li class="listitem">
- Changed the Windows <code class="computeroutput"><span class="identifier">HANDLE</span></code>
- backend to treat <code class="computeroutput"><span class="identifier">ERROR_MORE_DATA</span></code>
- as a non-fatal error when returned by <code class="computeroutput"><span class="identifier">GetOverlappedResult</span></code>
- for a synchronous read.
- </li>
- <li class="listitem">
- Visual C++ language extensions use <code class="computeroutput"><span class="identifier">generic</span></code>
- as a keyword. Added a workaround that renames the namespace to <code class="computeroutput"><span class="identifier">cpp_generic</span></code> when those language extensions
- are in effect.
- </li>
- <li class="listitem">
- Fixed some asynchronous operations that missed out on getting <code class="computeroutput"><span class="identifier">async_result</span></code> support in 1.10.0. In particular,
- the buffered stream templates have been updated so that they adhere to
- current handler patterns.
- </li>
- <li class="listitem">
- Enabled move support for Microsoft Visual Studio 2012.
- </li>
- <li class="listitem">
- Added <code class="computeroutput"><span class="identifier">use_future</span></code> support
- for Microsoft Visual Studio 2012.
- </li>
- <li class="listitem">
- Removed a use of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">min</span></code> in the Windows IOCP backend to avoid
- a dependency on the <code class="computeroutput"><span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span></code> header.
- </li>
- <li class="listitem">
- Eliminated some unnecessary handler copies.
- </li>
- <li class="listitem">
- Fixed support for older versions of OpenSSL that do not provide the <code class="computeroutput"><span class="identifier">SSL_CTX_clear_options</span></code> function.
- </li>
- <li class="listitem">
- Fixed various minor and cosmetic issues in code and documentation.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h2"></a>
- <span><a name="asio.history.asio_1_10_0"></a></span><a class="link" href="history.html#asio.history.asio_1_10_0">Asio
- 1.10.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added new traits classes, <code class="computeroutput"><span class="identifier">handler_type</span></code>
- and <code class="computeroutput"><span class="identifier">async_result</span></code>, that
- allow the customisation of the return type of an initiating function.
- </li>
- <li class="listitem">
- Added the <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">spawn</span><span class="special">()</span></code>
- function, a high-level wrapper for running stackful coroutines, based on
- the Boost.Coroutine library. The <code class="computeroutput"><span class="identifier">spawn</span><span class="special">()</span></code> function enables programs to implement
- asynchronous logic in a synchronous manner. For example: <code class="computeroutput"><span class="identifier">size_t</span> <span class="identifier">n</span>
- <span class="special">=</span> <span class="identifier">my_socket</span><span class="special">.</span><span class="identifier">async_read_some</span><span class="special">(</span><span class="identifier">my_buffer</span><span class="special">,</span> <span class="identifier">yield</span><span class="special">);</span></code>. For further information, see <a class="link" href="overview/core/spawn.html" title="Stackful Coroutines">Stackful
- Coroutines</a>.
- </li>
- <li class="listitem">
- Added the <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">use_future</span></code> special value, which provides
- first-class support for returning a C++11 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">future</span></code>
- from an asynchronous operation's initiating function. For example: <code class="computeroutput"><span class="identifier">future</span><span class="special"><</span><span class="identifier">size_t</span><span class="special">></span>
- <span class="special">=</span> <span class="identifier">my_socket</span><span class="special">.</span><span class="identifier">async_read_some</span><span class="special">(</span><span class="identifier">my_buffer</span><span class="special">,</span> <span class="identifier">asio</span><span class="special">::</span><span class="identifier">use_future</span><span class="special">);</span></code>. For further information, see <a class="link" href="overview/cpp2011/futures.html" title="Futures">C++
- 2011 Support - Futures</a>.
- </li>
- <li class="listitem">
- Promoted the stackless coroutine class and macros to be part of Asio's
- documented interface, rather than part of the HTTP server 4 example. For
- further information, see <a class="link" href="overview/core/coroutine.html" title="Stackless Coroutines">Stackless
- Coroutines</a>.
- </li>
- <li class="listitem">
- Added a new handler hook called <code class="computeroutput"><span class="identifier">asio_handler_is_continuation</span></code>.
- Asynchronous operations may represent a continuation of the asynchronous
- control flow associated with the current executing handler. The <code class="computeroutput"><span class="identifier">asio_handler_is_continuation</span></code> hook can
- be customised to return <code class="computeroutput"><span class="keyword">true</span></code>
- if this is the case, and Asio's implementation can use this knowledge to
- optimise scheduling of the new handler. To cover common cases, Asio customises
- the hook for strands, <code class="computeroutput"><span class="identifier">spawn</span><span class="special">()</span></code> and composed asynchronous operations.
- </li>
- <li class="listitem">
- Added four new generic protocol classes, <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">datagram_protocol</span></code>,
- <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">raw_protocol</span></code>, <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">seq_packet_protocol</span></code>
- and <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">stream_protocol</span></code>, which implement the
- <code class="computeroutput"><span class="identifier">Protocol</span></code> type requirements,
- but allow the user to specify the address family (e.g. <code class="computeroutput"><span class="identifier">AF_INET</span></code>)
- and protocol type (e.g. <code class="computeroutput"><span class="identifier">IPPROTO_TCP</span></code>)
- at runtime. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
- for Other Protocols</a>.
- </li>
- <li class="listitem">
- Added C++11 move constructors that allow the conversion of a socket (or
- acceptor) into a more generic type. For example, an <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">socket</span></code>
- can be converted into a <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">stream_protocol</span><span class="special">::</span><span class="identifier">socket</span></code>
- via move construction. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
- for Other Protocols</a>.
- </li>
- <li class="listitem">
- Extended the <code class="computeroutput"><span class="identifier">basic_socket_acceptor</span><span class="special"><></span></code>'s <code class="computeroutput"><span class="identifier">accept</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">async_accept</span><span class="special">()</span></code> functions to allow a new connection to
- be accepted directly into a socket of a more generic type. For example,
- an <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">acceptor</span></code> can be used to accept into a
- <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">stream_protocol</span><span class="special">::</span><span class="identifier">socket</span></code> object. For further information,
- see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support for
- Other Protocols</a>.
- </li>
- <li class="listitem">
- Moved existing examples into a C++03-specific directory, and added a new
- directory for C++11-specific examples. A limited subset of the C++03 examples
- have been converted to their C++11 equivalents.
- </li>
- <li class="listitem">
- 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 <code class="computeroutput"><span class="identifier">ASIO_STANDALONE</span></code> 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:
- <div class="itemizedlist"><ul class="itemizedlist" type="circle">
- <li class="listitem">
- Linux with g++ 4.7 (requires <code class="literal">-std=c++11</code>)
- </li>
- <li class="listitem">
- Mac OS X with clang++ / Xcode 4.6 (requires <code class="literal">-std=c++11 -stdlib=libc++</code>)
- </li>
- </ul></div>
- </li>
- <li class="listitem">
- Various SSL enhancements. Thanks go to Nick Jones, on whose work these
- changes are based.
- <div class="itemizedlist"><ul class="itemizedlist" type="circle">
- <li class="listitem">
- Added support for SSL handshakes with re-use of data already read
- from the wire. New overloads of the <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream</span><span class="special"><></span></code> class's <code class="computeroutput"><span class="identifier">handshake</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">async_handshake</span><span class="special">()</span></code> functions have been added. These
- accept a <code class="computeroutput"><span class="identifier">ConstBufferSequence</span></code>
- to be used as initial input to the ssl engine for the handshake procedure.
- </li>
- <li class="listitem">
- Added support for creation of TLSv1.1 and TLSv1.2 <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span></code>
- objects.
- </li>
- <li class="listitem">
- Added a <code class="computeroutput"><span class="identifier">set_verify_depth</span><span class="special">()</span></code> function to the <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span></code>
- and <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream</span><span class="special"><></span></code>
- classes.
- </li>
- <li class="listitem">
- Added the ability to load SSL certificate and key data from memory
- buffers. New functions, <code class="computeroutput"><span class="identifier">add_certificate_authority</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">use_certificate</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">use_certificate_chain</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">use_private_key</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">use_rsa_private_key</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">use_tmp_dh</span><span class="special">()</span></code>, have been added to the <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span></code> class.
- </li>
- <li class="listitem">
- Changed <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span></code> to automatically disable
- SSL compression by default. To enable, use the new <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span><span class="special">::</span><span class="identifier">clear_options</span><span class="special">()</span></code>
- function, as in <code class="computeroutput"><span class="identifier">my_context</span><span class="special">.</span><span class="identifier">clear_options</span><span class="special">(</span><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span><span class="special">::</span><span class="identifier">no_compression</span><span class="special">)</span></code>.
- </li>
- </ul></div>
- </li>
- <li class="listitem">
- Fixed a potential deadlock in <code class="computeroutput"><span class="identifier">signal_set</span></code>
- implementation.
- </li>
- <li class="listitem">
- Fixed an error in acceptor example in documentation.
- </li>
- <li class="listitem">
- Fixed copy-paste errors in waitable timer documentation.
- </li>
- <li class="listitem">
- Added assertions to satisfy some code analysis tools.
- </li>
- <li class="listitem">
- Fixed a malformed <code class="computeroutput"><span class="preprocessor">#warning</span></code>
- directive.
- </li>
- <li class="listitem">
- Fixed a potential data race in the Linux <code class="computeroutput"><span class="identifier">epoll</span></code>
- implementation.
- </li>
- <li class="listitem">
- Fixed a Windows-specific bug, where certain operations might generate an
- <code class="computeroutput"><span class="identifier">error_code</span></code> with an invalid
- (i.e. <code class="computeroutput"><span class="identifier">NULL</span></code>) <code class="computeroutput"><span class="identifier">error_category</span></code>.
- </li>
- <li class="listitem">
- Fixed <code class="computeroutput"><span class="identifier">basic_waitable_timer</span></code>'s
- underlying implementation so that it can handle any <code class="computeroutput"><span class="identifier">time_point</span></code>
- value without overflowing the intermediate duration objects.
- </li>
- <li class="listitem">
- Fixed a problem with lost thread wakeups that can occur when making concurrent
- calls to <code class="computeroutput"><span class="identifier">run</span><span class="special">()</span></code>
- and <code class="computeroutput"><span class="identifier">poll</span><span class="special">()</span></code>
- on the same <code class="computeroutput"><span class="identifier">io_service</span></code>
- object.
- </li>
- <li class="listitem">
- Fixed implementation of asynchronous connect operation so that it can cope
- with spurious readiness notifications from the reactor.
- </li>
- <li class="listitem">
- Fixed a memory leak in the <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">rfc2818_verification</span></code>
- class.
- </li>
- <li class="listitem">
- Added a mechanism for disabling automatic Winsock initialisation. See the
- header file <code class="literal">asio/detail/winsock_init.hpp</code> for details.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h3"></a>
- <span><a name="asio.history.asio_1_8_3"></a></span><a class="link" href="history.html#asio.history.asio_1_8_3">Asio
- 1.8.3</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Fixed some 64-to-32-bit conversion warnings.
- </li>
- <li class="listitem">
- Fixed various small errors in documentation and comments.
- </li>
- <li class="listitem">
- Fixed an error in the example embedded in <code class="computeroutput"><span class="identifier">basic_socket</span><span class="special">::</span><span class="identifier">get_option</span></code>'s
- documentation.
- </li>
- <li class="listitem">
- Changed to use <code class="computeroutput"><span class="keyword">long</span></code> rather
- than <code class="computeroutput"><span class="keyword">int</span></code> for SSL_CTX options,
- to match OpenSSL.
- </li>
- <li class="listitem">
- Changed to use <code class="computeroutput"><span class="identifier">_snwprintf</span></code>
- to address a compile error due to the changed <code class="computeroutput"><span class="identifier">swprintf</span></code>
- signature in recent versions of MinGW.
- </li>
- <li class="listitem">
- Fixed a deadlock that can occur on Windows when shutting down a pool of
- <code class="computeroutput"><span class="identifier">io_service</span></code> threads due
- to running out of work.
- </li>
- <li class="listitem">
- Changed UNIX domain socket example to treat errors from <code class="computeroutput"><span class="identifier">accept</span></code>
- as non-fatal.
- </li>
- <li class="listitem">
- Added a small block recycling optimisation to improve default memory allocation
- behaviour.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h4"></a>
- <span><a name="asio.history.asio_1_8_2"></a></span><a class="link" href="history.html#asio.history.asio_1_8_2">Asio
- 1.8.2</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Fixed an incompatibility between <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">iostream</span></code>
- and C++11.
- </li>
- <li class="listitem">
- Decorated GCC attribute names with underscores to prevent interaction with
- user-defined macros.
- </li>
- <li class="listitem">
- Added missing <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cctype</span><span class="special">></span></code>, needed for some versions of MinGW.
- </li>
- <li class="listitem">
- Changed to use <code class="literal">gcc</code>'s atomic builtins on ARM CPUs, when
- available.
- </li>
- <li class="listitem">
- Changed strand destruction to be a no-op, to allow strand objects to be
- destroyed after their associated <code class="computeroutput"><span class="identifier">io_service</span></code>
- has been destroyed.
- </li>
- <li class="listitem">
- Added support for some newer versions of glibc which provide the <code class="computeroutput"><span class="identifier">epoll_create1</span><span class="special">()</span></code>
- function but always fail with ENOSYS.
- </li>
- <li class="listitem">
- Changed the SSL implementation to throw an exception if SSL engine initialisation
- fails.
- </li>
- <li class="listitem">
- Fixed another regression in <code class="computeroutput"><span class="identifier">buffered_write_stream</span></code>.
- </li>
- <li class="listitem">
- Implemented various minor performance improvements, primarily targeted
- at Linux x86 and x86-64 platforms.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h5"></a>
- <span><a name="asio.history.asio_1_8_1"></a></span><a class="link" href="history.html#asio.history.asio_1_8_1">Asio
- 1.8.1</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
- backend to do lazy registration for <code class="computeroutput"><span class="identifier">EPOLLOUT</span></code>
- events.
- </li>
- <li class="listitem">
- Fixed the <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
- handling of out-of-band data, which was broken by an incomplete fix in
- the last release.
- </li>
- <li class="listitem">
- Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput"><span class="identifier">OPENSSL_NO_ENGINE</span></code>
- feature test <code class="computeroutput"><span class="preprocessor">#define</span></code>.
- </li>
- <li class="listitem">
- Fixed <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">object_handle</span></code> so that it works with Windows
- compilers that support C++11 move semantics (such as <code class="literal">g++</code>).
- </li>
- <li class="listitem">
- Improved the performance of strand rescheduling.
- </li>
- <li class="listitem">
- Added support for <code class="literal">g++</code> 4.7 when compiling in C++11 mode.
- </li>
- <li class="listitem">
- Fixed a problem where <code class="computeroutput"><span class="identifier">signal_set</span></code>
- handlers were not being delivered when the <code class="computeroutput"><span class="identifier">io_service</span></code>
- was constructed with a <code class="computeroutput"><span class="identifier">concurrency_hint</span></code>
- of 1.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h6"></a>
- <span><a name="asio.history.asio_1_8_0"></a></span><a class="link" href="history.html#asio.history.asio_1_8_0">Asio
- 1.8.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added a new class template <code class="computeroutput"><span class="identifier">basic_waitable_timer</span></code>
- based around the C++11 clock type requirements. It may be used with the
- clocks from the C++11 <code class="computeroutput"><span class="special"><</span><span class="identifier">chrono</span><span class="special">></span></code>
- library facility or, if those are not available, Boost.Chrono. The typedefs
- <code class="computeroutput"><span class="identifier">high_resolution_timer</span></code>,
- <code class="computeroutput"><span class="identifier">steady_timer</span></code> and <code class="computeroutput"><span class="identifier">system_timer</span></code> may be used to create timer
- objects for the standard clock types.
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">object_handle</span></code> class for performing waits
- on Windows kernel objects. Thanks go to Boris Schaeling for contributing
- substantially to the development of this feature.
- </li>
- <li class="listitem">
- On Linux, <code class="computeroutput"><span class="identifier">connect</span><span class="special">()</span></code>
- can return EAGAIN in certain circumstances. Remapped this to another error
- so that it doesn't look like a non-blocking operation.
- </li>
- <li class="listitem">
- Fixed a compile error on NetBSD.
- </li>
- <li class="listitem">
- Fixed deadlock on Mac OS X.
- </li>
- <li class="listitem">
- Fixed a regression in <code class="computeroutput"><span class="identifier">buffered_write_stream</span></code>.
- </li>
- <li class="listitem">
- Fixed a non-paged pool "leak" on Windows when an <code class="computeroutput"><span class="identifier">io_service</span></code> is repeatedly run without
- anything to do.
- </li>
- <li class="listitem">
- Reverted earlier change to allow some speculative operations to be performed
- without holding the lock, as it introduced a race condition in some multithreaded
- scenarios.
- </li>
- <li class="listitem">
- Fixed a bug where the second buffer in an array of two buffers may be ignored
- if the first buffer is empty.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h7"></a>
- <span><a name="asio.history.asio_1_6_1"></a></span><a class="link" href="history.html#asio.history.asio_1_6_1">Asio
- 1.6.1</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Implemented various performance improvements, including:
- <div class="itemizedlist"><ul class="itemizedlist" type="circle">
- <li class="listitem">
- Using thread-local operation queues in single-threaded use cases
- (i.e. when <code class="computeroutput"><span class="identifier">concurrency_hint</span></code>
- is 1) to eliminate a lock/unlock pair.
- </li>
- <li class="listitem">
- Allowing some <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
- speculative operations to be performed without holding the lock.
- </li>
- <li class="listitem">
- Improving locality of reference by performing an <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>'s
- I/O operation immediately before the corresponding handler is called.
- This also improves scalability across CPUs when multiple threads
- are running the <code class="computeroutput"><span class="identifier">io_service</span></code>.
- </li>
- <li class="listitem">
- Specialising asynchronous read and write operations for buffer sequences
- that are arrays (<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span></code>
- or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>) of exactly two buffers.
- </li>
- </ul></div>
- </li>
- <li class="listitem">
- Fixed a compile error in the regex overload of <code class="computeroutput"><span class="identifier">async_read_until</span></code>.
- </li>
- <li class="listitem">
- Fixed a Windows-specific compile error by explicitly specifying the <code class="computeroutput"><span class="identifier">signal</span><span class="special">()</span></code>
- function from the global namespace.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
- implementation so that it does not read the clock unless the timer heap
- is non-empty.
- </li>
- <li class="listitem">
- Changed the SSL stream's buffers' sizes so that they are large enough to
- hold a complete TLS record.
- </li>
- <li class="listitem">
- Fixed the behaviour of the synchronous <code class="computeroutput"><span class="identifier">null_buffers</span></code>
- operations so that they obey the user's non-blocking setting.
- </li>
- <li class="listitem">
- Changed to set the size of the select <code class="computeroutput"><span class="identifier">fd_set</span></code>
- at runtime when using Windows.
- </li>
- <li class="listitem">
- Disabled an MSVC warning due to const qualifier being applied to function
- type.
- </li>
- <li class="listitem">
- Fixed a crash that occurs when using the Intel C++ compiler.
- </li>
- <li class="listitem">
- Changed the initialisation of the OpenSSL library so that it supports all
- available algorithms.
- </li>
- <li class="listitem">
- Fixed the SSL error mapping used when the session is gracefully shut down.
- </li>
- <li class="listitem">
- Added some latency test programs.
- </li>
- <li class="listitem">
- Clarified that a read operation ends when the buffer is full.
- </li>
- <li class="listitem">
- Fixed an exception safety issue in <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
- initialisation.
- </li>
- <li class="listitem">
- Made the number of strand implementations configurable by defining <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_STRAND_IMPLEMENTATIONS</span></code>
- to the desired number.
- </li>
- <li class="listitem">
- Added support for a new <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_ENABLE_SEQUENTIAL_STRAND_ALLOCATION</span></code>
- flag which switches the allocation of strand implementations to use a round-robin
- approach rather than hashing.
- </li>
- <li class="listitem">
- Fixed potential strand starvation issue that can occur when <code class="computeroutput"><span class="identifier">strand</span><span class="special">.</span><span class="identifier">post</span><span class="special">()</span></code>
- is used.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h8"></a>
- <span><a name="asio.history.asio_1_6_0"></a></span><a class="link" href="history.html#asio.history.asio_1_6_0">Asio
- 1.6.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- 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 <code class="literal">-std=c++0x</code>
- mode on g++ 4.5 or higher.
- </li>
- <li class="listitem">
- Added build support for platforms that don't provide either of <code class="computeroutput"><span class="identifier">signal</span><span class="special">()</span></code>
- or <code class="computeroutput"><span class="identifier">sigaction</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Changed to use C++0x variadic templates when they are available, rather
- than generating function overloads using the Boost.Preprocessor library.
- </li>
- <li class="listitem">
- Ensured the value of <code class="computeroutput"><span class="identifier">errno</span></code>
- is preserved across the implementation's signal handler.
- </li>
- <li class="listitem">
- On Windows, ensured the count of outstanding work is decremented for abandoned
- operations (i.e. operations that are being cleaned up within the <code class="computeroutput"><span class="identifier">io_service</span></code> destructor).
- </li>
- <li class="listitem">
- Fixed behaviour of zero-length reads and writes in the new SSL implementation.
- </li>
- <li class="listitem">
- Added support for building with OpenSSL 1.0 when <code class="computeroutput"><span class="identifier">OPENSSL_NO_SSL2</span></code>
- is defined.
- </li>
- <li class="listitem">
- Changed most examples to treat a failure by an accept operation as non-fatal.
- </li>
- <li class="listitem">
- Fixed an error in the <code class="literal">tick_count_timer</code> example by making
- the duration type signed. Previously, a wait on an already-passed deadline
- would not return for a very long time.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h9"></a>
- <span><a name="asio.history.asio_1_5_3"></a></span><a class="link" href="history.html#asio.history.asio_1_5_3">Asio
- 1.5.3</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added a new, completely rewritten SSL implementation. The new implementation
- compiles faster, shows substantially improved performance, and supports
- custom memory allocation and handler invocation. It includes new API features
- such as certificate verification callbacks and has improved error reporting.
- The new implementation is source-compatible with the old for most uses.
- However, if necessary, the old implementation may still be used by defining
- <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_ENABLE_OLD_SSL</span></code>.
- </li>
- <li class="listitem">
- Added new <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">buffer</span><span class="special">()</span></code>
- overloads for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>, when available. The support is
- automatically enabled when compiling in <code class="literal">-std=c++0x</code> mode
- on g++ 4.3 or higher, or when using MSVC 10. The support may be explicitly
- enabled by defining <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_HAS_STD_ARRAY</span></code>,
- or disabled by defining <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DISABLE_STD_ARRAY</span></code>.
- </li>
- <li class="listitem">
- Changed to use the C++0x standard library templates <code class="computeroutput"><span class="identifier">array</span></code>,
- <code class="computeroutput"><span class="identifier">shared_ptr</span></code>, <code class="computeroutput"><span class="identifier">weak_ptr</span></code> and <code class="computeroutput"><span class="identifier">atomic</span></code>
- when they are available, rather than the Boost equivalents.
- </li>
- <li class="listitem">
- Support for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">error_code</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span></code>
- is no longer enabled by default for g++ 4.5, as that compiler's standard
- library does not implement <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span><span class="special">::</span><span class="identifier">what</span><span class="special">()</span></code> correctly.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h10"></a>
- <span><a name="asio.history.asio_1_5_2"></a></span><a class="link" href="history.html#asio.history.asio_1_5_2">Asio
- 1.5.2</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added support for C++0x move construction and assignment to sockets, serial
- ports, POSIX descriptors and Windows handles.
- </li>
- <li class="listitem">
- Added support for the <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code> system call. Programs that use <code class="computeroutput"><span class="identifier">fork</span><span class="special">()</span></code>
- must call <code class="computeroutput"><span class="identifier">io_service</span><span class="special">.</span><span class="identifier">notify_fork</span><span class="special">()</span></code>
- at the appropriate times. Two new examples have been added showing how
- to use this feature.
- </li>
- <li class="listitem">
- Cleaned up the handling of errors reported by the <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code> system call. In particular, assume that
- most operating systems won't have <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code> fail with <code class="computeroutput"><span class="identifier">EWOULDBLOCK</span></code>,
- but if it does then set the blocking mode and restart the call. If any
- other error occurs, assume the descriptor is closed.
- </li>
- <li class="listitem">
- The kqueue flag <code class="computeroutput"><span class="identifier">EV_ONESHOT</span></code>
- seems to cause problems on some versions of Mac OS X, with the <code class="computeroutput"><span class="identifier">io_service</span></code> destructor getting stuck inside
- the <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code>
- system call. Changed the kqueue backend to use <code class="computeroutput"><span class="identifier">EV_CLEAR</span></code>
- instead.
- </li>
- <li class="listitem">
- Changed exception reporting to include the function name in exception
- <code class="computeroutput"><span class="identifier">what</span><span class="special">()</span></code>
- messages.
- </li>
- <li class="listitem">
- Fixed an insufficient initialisers warning with MinGW.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">shutdown_service</span><span class="special">()</span></code> member functions to be private.
- </li>
- <li class="listitem">
- Added archetypes for testing socket option functions.
- </li>
- <li class="listitem">
- Added a missing lock in <code class="computeroutput"><span class="identifier">signal_set_service</span><span class="special">::</span><span class="identifier">cancel</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Fixed a copy/paste error in <code class="computeroutput"><span class="identifier">SignalHandler</span></code>
- example.
- </li>
- <li class="listitem">
- Added the inclusion of the signal header to <code class="computeroutput"><span class="identifier">signal_set_service</span><span class="special">.</span><span class="identifier">hpp</span></code>
- so that constants like <code class="computeroutput"><span class="identifier">NSIG</span></code>
- may be used.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">signal_set_service</span></code>
- implementation so that it doesn't assume that <code class="computeroutput"><span class="identifier">SIGRTMAX</span></code>
- is a compile-time constant.
- </li>
- <li class="listitem">
- Changed the Boost.Asio examples so that they don't use Boost.Thread's convenience
- header. Use the header file that is specifically for the boost::thread
- class instead.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h11"></a>
- <span><a name="asio.history.asio_1_5_1"></a></span><a class="link" href="history.html#asio.history.asio_1_5_1">Asio
- 1.5.1</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added support for signal handling, using a new class called <code class="computeroutput"><span class="identifier">signal_set</span></code>. Programs may add one or more
- signals to the set, and then perform an <code class="computeroutput"><span class="identifier">async_wait</span><span class="special">()</span></code> operation. The specified handler will
- be called when one of the signals occurs. The same signal number may registered
- with multiple <code class="computeroutput"><span class="identifier">signal_set</span></code>
- objects, however the signal number must be used only with Asio.
- </li>
- <li class="listitem">
- Added handler tracking, a new debugging aid. When enabled by defining
- <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_ENABLE_HANDLER_TRACKING</span></code>,
- Asio writes debugging output to the standard error stream. The output records
- asynchronous operations and the relationships between their handlers. It
- may be post-processed using the included <code class="literal">handlerviz.pl</code>
- tool to create a visual representation of the handlers (requires GraphViz).
- </li>
- <li class="listitem">
- Fixed a bug in <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">streambuf</span></code> where the <code class="computeroutput"><span class="identifier">consume</span><span class="special">()</span></code> function did not always update the internal
- buffer pointers correctly. The problem may occur when the <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">streambuf</span></code> is filled with data using the
- standard C++ member functions such as <code class="computeroutput"><span class="identifier">sputn</span><span class="special">()</span></code>. (Note: the problem does not manifest
- when the streambuf is populated by the Asio free functions <code class="computeroutput"><span class="identifier">read</span><span class="special">()</span></code>,
- <code class="computeroutput"><span class="identifier">async_read</span><span class="special">()</span></code>,
- <code class="computeroutput"><span class="identifier">read_until</span><span class="special">()</span></code>
- or <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>.)
- </li>
- <li class="listitem">
- Fixed a bug on kqueue-based platforms, where reactor read operations that
- return false from their <code class="computeroutput"><span class="identifier">perform</span><span class="special">()</span></code> function are not correctly re-registered
- with kqueue.
- </li>
- <li class="listitem">
- Support for <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">error_code</span></code> and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span></code>
- is no longer enabled by default for MSVC10, as that compiler's standard
- library does not implement <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span><span class="special">::</span><span class="identifier">what</span><span class="special">()</span></code> correctly.
- </li>
- <li class="listitem">
- Modified the <code class="computeroutput"><span class="identifier">buffers_iterator</span><span class="special"><></span></code> and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">basic_resolver_iterator</span></code>
- classes so that the value_type typedefs are non-const byte types.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h12"></a>
- <span><a name="asio.history.asio_1_5_0"></a></span><a class="link" href="history.html#asio.history.asio_1_5_0">Asio
- 1.5.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added support for timeouts on socket iostreams, such as <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">iostream</span></code>.
- A timeout is set by calling <code class="computeroutput"><span class="identifier">expires_at</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">expires_from_now</span><span class="special">()</span></code> to establish a deadline. Any socket operations
- which occur past the deadline will put the iostream into a bad state.
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">error</span><span class="special">()</span></code>
- member function to socket iostreams, for retrieving the error code from
- the most recent system call.
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">basic_deadline_timer</span><span class="special">::</span><span class="identifier">cancel_one</span><span class="special">()</span></code> function. This function lets you cancel
- a single waiting handler on a timer. Handlers are cancelled in FIFO order.
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">transfer_exactly</span><span class="special">()</span></code> completion condition. This can be used
- to send or receive a specified number of bytes even if the total size of
- the buffer (or buffer sequence) is larger.
- </li>
- <li class="listitem">
- Added new free functions <code class="computeroutput"><span class="identifier">connect</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">async_connect</span><span class="special">()</span></code>. These operations try each endpoint in
- a list until the socket is successfully connected.
- </li>
- <li class="listitem">
- Extended the <code class="computeroutput"><span class="identifier">buffer_size</span><span class="special">()</span></code> function so that it works for buffer
- sequences in addition to individual buffers.
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">buffer_copy</span><span class="special">()</span></code> function that can be used to copy the
- raw bytes between individual buffers and buffer sequences.
- </li>
- <li class="listitem">
- Added new non-throwing overloads of <code class="computeroutput"><span class="identifier">read</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">read_at</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">write</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">write_at</span><span class="special">()</span></code> that do not require a completion condition.
- </li>
- <li class="listitem">
- Added friendlier compiler errors for when a completion handler does not
- meet the necessary type requirements. When C++0x is available (currently
- supported for g++ 4.5 or later, and MSVC 10), <code class="computeroutput"><span class="keyword">static_assert</span></code>
- is also used to generate an informative error message. This checking may
- be disabled by defining <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DISABLE_HANDLER_TYPE_REQUIREMENTS</span></code>.
- </li>
- <li class="listitem">
- Added support for using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">error_code</span></code>
- and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span></code>, when available. The support
- is automatically enabled when compiling in <code class="literal">-std=c++0x</code>
- mode on g++ 4.5 or higher, or when using MSVC 10. The support may be explicitly
- enabled by defining <code class="computeroutput"><span class="identifier">ASIO_HAS_STD_SYSTEM_ERROR</span></code>,
- or disabled by defining <code class="computeroutput"><span class="identifier">ASIO_DISABLE_STD_SYSTEM_ERROR</span></code>.
- (Available in non-Boost version of Asio only.)
- </li>
- <li class="listitem">
- Made the <code class="computeroutput"><span class="identifier">is_loopback</span><span class="special">()</span></code>,
- <code class="computeroutput"><span class="identifier">is_unspecified</span><span class="special">()</span></code>
- and <code class="computeroutput"><span class="identifier">is_multicast</span><span class="special">()</span></code>
- functions consistently available across the <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">address</span></code>,
- <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">address_v4</span></code> and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">address_v6</span></code>
- classes.
- </li>
- <li class="listitem">
- Added new <code class="computeroutput"><span class="identifier">non_blocking</span><span class="special">()</span></code> functions for managing the non-blocking
- behaviour of a socket or descriptor. The <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code> commands named <code class="computeroutput"><span class="identifier">non_blocking_io</span></code>
- are now deprecated in favour of these new functions.
- </li>
- <li class="listitem">
- Added new <code class="computeroutput"><span class="identifier">native_non_blocking</span><span class="special">()</span></code> functions for managing the non-blocking
- mode of the underlying socket or descriptor. These functions are intended
- to allow the encapsulation of arbitrary non-blocking system calls as asynchronous
- operations, in a way that is transparent to the user of the socket object.
- The functions have no effect on the behaviour of the synchronous operations
- of the socket or descriptor.
- </li>
- <li class="listitem">
- Added the <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code>
- member function for socket acceptors.
- </li>
- <li class="listitem">
- For consistency with the C++0x standard library, deprecated the <code class="computeroutput"><span class="identifier">native_type</span></code> typedefs in favour of <code class="computeroutput"><span class="identifier">native_handle_type</span></code>, and the <code class="computeroutput"><span class="identifier">native</span><span class="special">()</span></code>
- member functions in favour of <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Added a <code class="computeroutput"><span class="identifier">release</span><span class="special">()</span></code>
- member function to posix descriptors. This function releases ownership
- of the underlying native descriptor to the caller.
- </li>
- <li class="listitem">
- Added support for sequenced packet sockets (<code class="computeroutput"><span class="identifier">SOCK_SEQPACKET</span></code>).
- </li>
- <li class="listitem">
- Added a new <code class="computeroutput"><span class="identifier">io_service</span><span class="special">::</span><span class="identifier">stopped</span><span class="special">()</span></code> function that can be used to determine
- whether the <code class="computeroutput"><span class="identifier">io_service</span></code>
- has stopped (i.e. a <code class="computeroutput"><span class="identifier">reset</span><span class="special">()</span></code> call is needed prior to any further calls
- to <code class="computeroutput"><span class="identifier">run</span><span class="special">()</span></code>,
- <code class="computeroutput"><span class="identifier">run_one</span><span class="special">()</span></code>,
- <code class="computeroutput"><span class="identifier">poll</span><span class="special">()</span></code>
- or <code class="computeroutput"><span class="identifier">poll_one</span><span class="special">()</span></code>).
- </li>
- <li class="listitem">
- Reduced the copying of handler function objects.
- </li>
- <li class="listitem">
- Added support for C++0x move construction to further reduce copying of
- handler objects. Move support is enabled when compiling in <code class="literal">-std=c++0x</code>
- mode on g++ 4.5 or higher, or when using MSVC10.
- </li>
- <li class="listitem">
- 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.
- </li>
- <li class="listitem">
- Reduced the size of <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">basic_endpoint</span><span class="special"><></span></code> objects (such as <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span><span class="special">::</span><span class="identifier">endpoint</span></code> and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">udp</span><span class="special">::</span><span class="identifier">endpoint</span></code>).
- </li>
- <li class="listitem">
- Changed the reactor backends to assume that any descriptors or sockets
- added using <code class="computeroutput"><span class="identifier">assign</span><span class="special">()</span></code>
- may have been <code class="computeroutput"><span class="identifier">dup</span><span class="special">()</span></code>-ed,
- and so require explicit deregistration from the reactor.
- </li>
- <li class="listitem">
- Changed the SSL error category to return error strings from the OpenSSL
- library.
- </li>
- <li class="listitem">
- 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.
- </li>
- <li class="listitem">
- Removed the deprecated member functions named <code class="computeroutput"><span class="identifier">io_service</span><span class="special">()</span></code>. The <code class="computeroutput"><span class="identifier">get_io_service</span><span class="special">()</span></code> member functions should be used instead.
- </li>
- <li class="listitem">
- Removed the deprecated typedefs <code class="computeroutput"><span class="identifier">resolver_query</span></code>
- and <code class="computeroutput"><span class="identifier">resolver_iterator</span></code> from
- the <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span></code>, <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">udp</span></code>
- and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">icmp</span></code> classes.
- </li>
- <li class="listitem">
- Fixed a compile error on some versions of g++ due to anonymous enums.
- </li>
- <li class="listitem">
- Added an explicit cast to the <code class="computeroutput"><span class="identifier">FIONBIO</span></code>
- constant to int to suppress a compiler warning on some platforms.
- </li>
- <li class="listitem">
- Fixed warnings reported by g++'s <code class="literal">-Wshadow</code> compiler option.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h13"></a>
- <span><a name="asio.history.asio_1_4_8"></a></span><a class="link" href="history.html#asio.history.asio_1_4_8">Asio
- 1.4.8</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Fixed an integer overflow problem that occurs when <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">address_v4</span><span class="special">::</span><span class="identifier">broadcast</span><span class="special">()</span></code> is used on 64-bit platforms.
- </li>
- <li class="listitem">
- Fixed a problem on older Linux kernels (where epoll is used without <code class="computeroutput"><span class="identifier">timerfd</span></code> support) that prevents timely
- delivery of <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
- handlers, after the program has been running for some time.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h14"></a>
- <span><a name="asio.history.asio_1_4_7"></a></span><a class="link" href="history.html#asio.history.asio_1_4_7">Asio
- 1.4.7</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Fixed a problem on kqueue-based platforms where a <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
- may never fire if the <code class="computeroutput"><span class="identifier">io_service</span></code>
- is running in a background thread.
- </li>
- <li class="listitem">
- Fixed a const-correctness issue that prevented valid uses of <code class="computeroutput"><span class="identifier">has_service</span><span class="special"><></span></code>
- from compiling.
- </li>
- <li class="listitem">
- Fixed MinGW cross-compilation.
- </li>
- <li class="listitem">
- Removed dependency on deprecated Boost.System functions (Boost.Asio only).
- </li>
- <li class="listitem">
- Ensured <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code>/<code class="computeroutput"><span class="identifier">closesocket</span><span class="special">()</span></code>
- failures are correctly propagated.
- </li>
- <li class="listitem">
- Added a check for errors returned by <code class="computeroutput"><span class="identifier">InitializeCriticalSectionAndSpinCount</span></code>.
- </li>
- <li class="listitem">
- Added support for hardware flow control on QNX.
- </li>
- <li class="listitem">
- Always use <code class="computeroutput"><span class="identifier">pselect</span><span class="special">()</span></code>
- on HP-UX, if it is available.
- </li>
- <li class="listitem">
- Ensured handler arguments are passed as lvalues.
- </li>
- <li class="listitem">
- Fixed Windows build when thread support is disabled.
- </li>
- <li class="listitem">
- Fixed a Windows-specific problem where <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
- objects with expiry times set more than 5 minutes in the future may never
- expire.
- </li>
- <li class="listitem">
- Fixed the resolver backend on BSD platforms so that an empty service name
- resolves to port number <code class="computeroutput"><span class="number">0</span></code>,
- as per the documentation.
- </li>
- <li class="listitem">
- Fixed read operations so that they do not accept buffer sequences of type
- <code class="computeroutput"><span class="identifier">const_buffers_1</span></code>.
- </li>
- <li class="listitem">
- Redefined <code class="computeroutput"><span class="identifier">Protocol</span></code> and
- <code class="computeroutput"><span class="identifier">id</span></code> to avoid clashing with
- Objective-C++ keywords.
- </li>
- <li class="listitem">
- Fixed a <code class="computeroutput"><span class="identifier">vector</span></code> reallocation
- performance issue that can occur when there are many active <code class="computeroutput"><span class="identifier">deadline_timer</span></code> objects.
- </li>
- <li class="listitem">
- Fixed the kqueue backend so that it compiles on NetBSD.
- </li>
- <li class="listitem">
- Fixed the socket <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code> implementation on 64-bit Mac OS X and
- BSD platforms.
- </li>
- <li class="listitem">
- Fixed a Windows-specific problem where failures from <code class="computeroutput"><span class="identifier">accept</span><span class="special">()</span></code> are incorrectly treated as successes.
- </li>
- <li class="listitem">
- Deprecated the separate compilation header <code class="computeroutput"><span class="identifier">asio</span><span class="special">/</span><span class="identifier">impl</span><span class="special">/</span><span class="identifier">src</span><span class="special">.</span><span class="identifier">cpp</span></code>
- in favour of <code class="computeroutput"><span class="identifier">asio</span><span class="special">/</span><span class="identifier">impl</span><span class="special">/</span><span class="identifier">src</span><span class="special">.</span><span class="identifier">hpp</span></code>.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h15"></a>
- <span><a name="asio.history.asio_1_4_6"></a></span><a class="link" href="history.html#asio.history.asio_1_4_6">Asio
- 1.4.6</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Reduced compile times. (Note that some programs may need to add additional
- <code class="computeroutput"><span class="preprocessor">#include</span></code>s, e.g. if the
- program uses boost::array but does not explicitly include <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">array</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>.)
- </li>
- <li class="listitem">
- Reduced the size of generated code.
- </li>
- <li class="listitem">
- Refactored <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
- implementation to improve performance.
- </li>
- <li class="listitem">
- Improved multiprocessor scalability on Windows by using a dedicated hidden
- thread to wait for timers.
- </li>
- <li class="listitem">
- Improved performance of <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">streambuf</span></code>
- with <code class="computeroutput"><span class="identifier">async_read</span><span class="special">()</span></code>
- and <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>.
- These read operations now use the existing capacity of the <code class="computeroutput"><span class="identifier">streambuf</span></code> when reading, rather than limiting
- the read to 512 bytes.
- </li>
- <li class="listitem">
- Added optional separate compilation. To enable, include <code class="computeroutput"><span class="identifier">asio</span><span class="special">/</span><span class="identifier">impl</span><span class="special">/</span><span class="identifier">src</span><span class="special">.</span><span class="identifier">cpp</span></code>
- in one source file in a program, then build the program with <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_SEPARATE_COMPILATION</span></code>
- defined in the project/compiler settings. Alternatively, <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DYN_LINK</span></code>
- may be defined to build a separately-compiled Asio as part of a shared
- library.
- </li>
- <li class="listitem">
- Added new macro <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DISABLE_FENCED_BLOCK</span></code>
- to permit the disabling of memory fences around completion handlers, even
- if thread support is enabled.
- </li>
- <li class="listitem">
- Reworked timeout examples to better illustrate typical use cases.
- </li>
- <li class="listitem">
- Ensured that handler arguments are passed as const types.
- </li>
- <li class="listitem">
- Fixed incorrect parameter order in <code class="computeroutput"><span class="identifier">null_buffers</span></code>
- variant of <code class="computeroutput"><span class="identifier">async_send_to</span></code>.
- </li>
- <li class="listitem">
- Ensured unsigned char is used with <code class="computeroutput"><span class="identifier">isdigit</span></code>
- in <code class="computeroutput"><span class="identifier">getaddrinfo</span></code> emulation.
- </li>
- <li class="listitem">
- Fixed handling of very small but non-zero timeouts.
- </li>
- <li class="listitem">
- Fixed crash that occurred when an empty buffer sequence was passed to a
- composed read or write operation.
- </li>
- <li class="listitem">
- Added missing operator+ overload in <code class="computeroutput"><span class="identifier">buffers_iterator</span></code>.
- </li>
- <li class="listitem">
- Implemented cancellation of <code class="computeroutput"><span class="identifier">null_buffers</span></code>
- operations on Windows.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h16"></a>
- <span><a name="asio.history.asio_1_4_5"></a></span><a class="link" href="history.html#asio.history.asio_1_4_5">Asio
- 1.4.5</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Improved performance.
- </li>
- <li class="listitem">
- Reduced compile times.
- </li>
- <li class="listitem">
- Reduced the size of generated code.
- </li>
- <li class="listitem">
- Extended the guarantee that background threads don't call user code to
- all asynchronous operations.
- </li>
- <li class="listitem">
- Changed to use edge-triggered epoll on Linux.
- </li>
- <li class="listitem">
- Changed to use <code class="computeroutput"><span class="identifier">timerfd</span></code>
- for dispatching timers on Linux, when available.
- </li>
- <li class="listitem">
- Changed to use one-shot notifications with kqueue on Mac OS X and BSD platforms.
- </li>
- <li class="listitem">
- Added a bitmask type <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">resolver_query_base</span><span class="special">::</span><span class="identifier">flags</span></code>
- as per the TR2 proposal. This type prevents implicit conversion from <code class="computeroutput"><span class="keyword">int</span></code> to <code class="computeroutput"><span class="identifier">flags</span></code>,
- allowing the compiler to catch cases where users incorrectly pass a numeric
- port number as the service name.
- </li>
- <li class="listitem">
- Added <code class="computeroutput"><span class="preprocessor">#define</span> <span class="identifier">NOMINMAX</span></code>
- for all Windows compilers. Users can define <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_NO_NOMINMAX</span></code> to suppress this definition.
- </li>
- <li class="listitem">
- Fixed a bug where 0-byte asynchronous reads were incorrectly passing an
- <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">eof</span></code> result to the completion handler.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code> member functions to always call <code class="computeroutput"><span class="identifier">ioctl</span></code> on the underlying descriptor when
- modifying blocking mode.
- </li>
- <li class="listitem">
- Changed the resolver implementation so that it no longer requires the typedefs
- <code class="computeroutput"><span class="identifier">InternetProtocol</span><span class="special">::</span><span class="identifier">resolver_query</span></code> and <code class="computeroutput"><span class="identifier">InternetProtocol</span><span class="special">::</span><span class="identifier">resolver_iterator</span></code>,
- as neither typedef is part of the documented <code class="computeroutput"><span class="identifier">InternetProtocol</span></code>
- requirements. The corresponding typedefs in the <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span></code>,
- <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">udp</span></code> and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">icmp</span></code>
- classes have been deprecated.
- </li>
- <li class="listitem">
- Fixed out-of-band handling for reactors not based on <code class="computeroutput"><span class="identifier">select</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Added new <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DISABLE_THREADS</span></code>
- macro that allows Asio's threading support to be independently disabled.
- </li>
- <li class="listitem">
- Minor documentation improvements.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h17"></a>
- <span><a name="asio.history.asio_1_4_4"></a></span><a class="link" href="history.html#asio.history.asio_1_4_4">Asio
- 1.4.4</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added a new HTTP Server 4 example illustrating the use of stackless coroutines
- with Asio.
- </li>
- <li class="listitem">
- Changed handler allocation and invocation to use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">addressof</span></code>
- to get the address of handler objects, rather than applying <code class="computeroutput"><span class="keyword">operator</span><span class="special">&</span></code>
- directly.
- </li>
- <li class="listitem">
- Restricted MSVC buffer debugging workaround to 2008, as it causes a crash
- with 2010 beta 2.
- </li>
- <li class="listitem">
- Fixed a problem with the lifetime of handler memory, where Windows needs
- the <code class="computeroutput"><span class="identifier">OVERLAPPED</span></code> structure
- to be valid until both the initiating function call has returned and the
- completion packet has been delivered.
- </li>
- <li class="listitem">
- Don't block signals while performing system calls, but instead restart
- the calls if they are interrupted.
- </li>
- <li class="listitem">
- Documented the guarantee made by strand objects with respect to order of
- handler invocation.
- </li>
- <li class="listitem">
- Changed strands to use a pool of implementations, to make copying of strands
- cheaper.
- </li>
- <li class="listitem">
- Ensured that kqueue support is enabled for BSD platforms.
- </li>
- <li class="listitem">
- Added a <code class="computeroutput"><span class="identifier">boost_</span></code> prefix to
- the <code class="computeroutput"><span class="keyword">extern</span> <span class="string">"C"</span></code>
- thread entry point function.
- </li>
- <li class="listitem">
- In <code class="computeroutput"><span class="identifier">getaddrinfo</span></code> emulation,
- only check the socket type (<code class="computeroutput"><span class="identifier">SOCK_STREAM</span></code>
- or <code class="computeroutput"><span class="identifier">SOCK_DGRAM</span></code>) if a service
- name has been specified. This should allow the emulation to work with raw
- sockets.
- </li>
- <li class="listitem">
- Added a workaround for some broken Windows firewalls that make a socket
- appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.
- </li>
- <li class="listitem">
- Applied a fix for reported excessive CPU usage under Solaris.
- </li>
- <li class="listitem">
- Added some support for platforms that use older compilers such as g++ 2.95.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h18"></a>
- <span><a name="asio.history.asio_1_4_3"></a></span><a class="link" href="history.html#asio.history.asio_1_4_3">Asio
- 1.4.3</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added a new ping example to illustrate the use of ICMP sockets.
- </li>
- <li class="listitem">
- Changed the <code class="computeroutput"><span class="identifier">buffered</span><span class="special">*</span><span class="identifier">_stream</span><span class="special"><></span></code>
- templates to treat 0-byte reads and writes as no-ops, to comply with the
- documented type requirements for <code class="computeroutput"><span class="identifier">SyncReadStream</span></code>,
- <code class="computeroutput"><span class="identifier">AsyncReadStream</span></code>, <code class="computeroutput"><span class="identifier">SyncWriteStream</span></code> and <code class="computeroutput"><span class="identifier">AsyncWriteStream</span></code>.
- </li>
- <li class="listitem">
- Changed some instances of the <code class="computeroutput"><span class="keyword">throw</span></code>
- keyword to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">throw_exception</span><span class="special">()</span></code>
- to allow Asio to be used when exception support is disabled. Note that
- the SSL wrappers still require exception support.
- </li>
- <li class="listitem">
- Made Asio compatible with the OpenSSL 1.0 beta.
- </li>
- <li class="listitem">
- Eliminated a redundant system call in the Solaris /dev/poll backend.
- </li>
- <li class="listitem">
- Fixed a bug in resizing of the bucket array in the internal hash maps.
- </li>
- <li class="listitem">
- Ensured correct propagation of the error code when a synchronous accept
- fails.
- </li>
- <li class="listitem">
- Ensured correct propagation of the error code when a synchronous read or
- write on a Windows <code class="computeroutput"><span class="identifier">HANDLE</span></code>
- fails.
- </li>
- <li class="listitem">
- Fixed failures reported when <code class="computeroutput"><span class="identifier">_GLIBCXX_DEBUG</span></code>
- is defined.
- </li>
- <li class="listitem">
- Fixed custom memory allocation support for timers.
- </li>
- <li class="listitem">
- Tidied up various warnings reported by g++.
- </li>
- <li class="listitem">
- Various documentation improvements, including more obvious hyperlinks to
- function overloads, header file information, examples for the handler type
- requirements, and adding enum values to the index.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h19"></a>
- <span><a name="asio.history.asio_1_4_2"></a></span><a class="link" href="history.html#asio.history.asio_1_4_2">Asio
- 1.4.2</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Implement automatic resizing of the bucket array in the internal hash maps.
- This is to improve performance for very large numbers of asynchronous operations
- and also to reduce memory usage for very small numbers. A new macro <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_HASH_MAP_BUCKETS</span></code>
- may be used to tweak the sizes used for the bucket arrays. (N.B. this feature
- introduced a bug which was fixed in Asio 1.4.3 / Boost 1.40.)
- </li>
- <li class="listitem">
- Add performance optimisation for the Windows IOCP backend for when no timers
- are used.
- </li>
- <li class="listitem">
- Prevent locale settings from affecting formatting of TCP and UDP endpoints.
- </li>
- <li class="listitem">
- Fix a memory leak that occurred when an asynchronous SSL operation's completion
- handler threw an exception.
- </li>
- <li class="listitem">
- Fix the implementation of <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code> so that it adheres to the documented
- type requirements for IoControlCommand.
- </li>
- <li class="listitem">
- Fix incompatibility between Asio and ncurses.h.
- </li>
- <li class="listitem">
- On Windows, specifically handle the case when an overlapped <code class="computeroutput"><span class="identifier">ReadFile</span></code> call fails with <code class="computeroutput"><span class="identifier">ERROR_MORE_DATA</span></code>. This enables a hack
- where a <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">stream_handle</span></code> can be used with a message-oriented
- named pipe.
- </li>
- <li class="listitem">
- Fix system call wrappers to always clear the error on success, as POSIX
- allows successful system calls to modify errno.
- </li>
- <li class="listitem">
- Don't include termios.h if <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_DISABLE_SERIAL_PORT</span></code> is defined.
- </li>
- <li class="listitem">
- Cleaned up some more MSVC level 4 warnings.
- </li>
- <li class="listitem">
- Various documentation fixes.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h20"></a>
- <span><a name="asio.history.asio_1_4_1"></a></span><a class="link" href="history.html#asio.history.asio_1_4_1">Asio
- 1.4.1</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Improved compatibility with some Windows firewall software.
- </li>
- <li class="listitem">
- Ensured arguments to <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">overlapped_ptr</span><span class="special">::</span><span class="identifier">complete</span><span class="special">()</span></code> are correctly passed to the completion
- handler.
- </li>
- <li class="listitem">
- Fixed a link problem and multicast failure on QNX.
- </li>
- <li class="listitem">
- Fixed a compile error in SSL support on MinGW / g++ 3.4.5.
- </li>
- <li class="listitem">
- Drop back to using a pipe for notification if eventfd is not available
- at runtime on Linux.
- </li>
- <li class="listitem">
- Various minor bug and documentation fixes.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h21"></a>
- <span><a name="asio.history.asio_1_4_0"></a></span><a class="link" href="history.html#asio.history.asio_1_4_0">Asio
- 1.4.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Enhanced CompletionCondition concept with the signature <code class="computeroutput"><span class="identifier">size_t</span>
- <span class="identifier">CompletionCondition</span><span class="special">(</span><span class="identifier">error_code</span> <span class="identifier">ec</span><span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">total</span><span class="special">)</span></code>,
- where the return value indicates the maximum number of bytes to be transferred
- on the next read or write operation. (The old CompletionCondition signature
- is still supported for backwards compatibility).
- </li>
- <li class="listitem">
- New <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">overlapped_ptr</span></code> class to allow arbitrary
- overlapped I/O functions (such as <code class="computeroutput"><span class="identifier">TransmitFile</span></code>)
- to be used with Asio.
- </li>
- <li class="listitem">
- On recent versions of Linux, an <code class="computeroutput"><span class="identifier">eventfd</span></code>
- descriptor is now used (rather than a pipe) to interrupt a blocked select/epoll
- reactor.
- </li>
- <li class="listitem">
- Added const overloads of <code class="computeroutput"><span class="identifier">lowest_layer</span><span class="special">()</span></code>.
- </li>
- <li class="listitem">
- Synchronous read, write, accept and connect operations are now thread safe
- (meaning that it is now permitted to perform concurrent synchronous operations
- on an individual socket, if supported by the OS).
- </li>
- <li class="listitem">
- Reactor-based <code class="computeroutput"><span class="identifier">io_service</span></code>
- implementations now use lazy initialisation to reduce the memory usage
- of an <code class="computeroutput"><span class="identifier">io_service</span></code> object
- used only as a message queue.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h22"></a>
- <span><a name="asio.history.asio_1_2_0"></a></span><a class="link" href="history.html#asio.history.asio_1_2_0">Asio
- 1.2.0</a>
- </h4>
- <div class="itemizedlist"><ul class="itemizedlist" type="disc">
- <li class="listitem">
- Added support for serial ports.
- </li>
- <li class="listitem">
- Added support for UNIX domain sockets.
- </li>
- <li class="listitem">
- Added support for raw sockets and ICMP.
- </li>
- <li class="listitem">
- Added wrappers for POSIX stream-oriented file descriptors (excluding regular
- files).
- </li>
- <li class="listitem">
- Added wrappers for Windows stream-oriented <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
- such as named pipes (requires <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
- that work with I/O completion ports).
- </li>
- <li class="listitem">
- Added wrappers for Windows random-access <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
- such as files (requires <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
- that work with I/O completion ports).
- </li>
- <li class="listitem">
- Added support for reactor-style operations (i.e. they report readiness
- but perform no I/O) using a new <code class="computeroutput"><span class="identifier">null_buffers</span></code>
- type.
- </li>
- <li class="listitem">
- Added an iterator type for bytewise traversal of buffer sequences.
- </li>
- <li class="listitem">
- Added new <code class="computeroutput"><span class="identifier">read_until</span><span class="special">()</span></code>
- and <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>
- overloads that take a user-defined function object for locating message
- boundaries.
- </li>
- <li class="listitem">
- Added an experimental two-lock queue (enabled by defining <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_</span><span class="special">)</span><span class="identifier">ASIO_ENABLE_TWO_LOCK_QUEUE</span></code>)
- that may provide better <code class="computeroutput"><span class="identifier">io_service</span></code>
- scalability across many processors.
- </li>
- <li class="listitem">
- Various fixes, performance improvements, and more complete coverage of
- the custom memory allocation support.
- </li>
- </ul></div>
- <h4>
- <a name="asio.history.h23"></a>
- <span><a name="asio.history.asio_1_0_0"></a></span><a class="link" href="history.html#asio.history.asio_1_0_0">Asio
- 1.0.0</a>
- </h4>
- <p>
- First stable release of Asio.
- </p>
- </div>
- <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
- <td align="left"></td>
- <td align="right"><div class="copyright-footer">Copyright © 2003-2014 Christopher M. Kohlhoff<p>
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
- </p>
- </div></td>
- </tr></table>
- <hr>
- <div class="spirit-nav">
- <a accesskey="p" href="reference/yield_context.html"><img src="../prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../home.png" alt="Home"></a><a accesskey="n" href="index.html"><img src="../next.png" alt="Next"></a>
- </div>
- </body>
- </html>
|