history.html 99 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Revision History</title>
  5. <link rel="stylesheet" href="../boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.75.2">
  7. <link rel="home" href="../index.html" title="Asio">
  8. <link rel="up" href="../index.html" title="Asio">
  9. <link rel="prev" href="reference/yield_context.html" title="yield_context">
  10. <link rel="next" href="index.html" title="">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr><td valign="top"><img alt="asio C++ library" width="250" height="60" src="../asio.png"></td></tr></table>
  14. <hr>
  15. <div class="spirit-nav">
  16. <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>
  17. </div>
  18. <div class="section">
  19. <div class="titlepage"><div><div><h2 class="title" style="clear: both">
  20. <a name="asio.history"></a><a class="link" href="history.html" title="Revision History">Revision History</a>
  21. </h2></div></div></div>
  22. <h4>
  23. <a name="asio.history.h0"></a>
  24. <span><a name="asio.history.asio_1_10_2"></a></span><a class="link" href="history.html#asio.history.asio_1_10_2">Asio
  25. 1.10.2</a>
  26. </h4>
  27. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  28. <li class="listitem">
  29. Fixed <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">spawn</span><span class="special">()</span></code>
  30. to work correctly with new Boost.Coroutine interface.
  31. </li>
  32. <li class="listitem">
  33. 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
  34. cleaned up by the <code class="computeroutput"><span class="identifier">io_service</span></code>
  35. destructor.
  36. </li>
  37. <li class="listitem">
  38. 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>
  39. and <code class="computeroutput"><span class="identifier">strand</span><span class="special">::</span><span class="identifier">wrap</span><span class="special">()</span></code>.
  40. </li>
  41. <li class="listitem">
  42. Changed the Windows I/O completion port backend to use <code class="computeroutput"><span class="identifier">ConnectEx</span></code>,
  43. if available, for connection-oriented IP sockets.
  44. </li>
  45. <li class="listitem">
  46. Changed the <code class="computeroutput"><span class="identifier">io_service</span></code>
  47. backend for non-Windows (and non-IOCP Windows) platforms to use a single
  48. condition variable per <code class="computeroutput"><span class="identifier">io_service</span></code>
  49. instance. This addresses a potential race condition when <code class="computeroutput"><span class="identifier">run_one</span><span class="special">()</span></code>
  50. is used from multiple threads.
  51. </li>
  52. <li class="listitem">
  53. 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>
  54. clocks.
  55. </li>
  56. <li class="listitem">
  57. Made further changes to <code class="computeroutput"><span class="identifier">EV_CLEAR</span></code>
  58. handling in the kqueue backend, to address other cases where the <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code>
  59. system call may hang on Mac OS X.
  60. </li>
  61. <li class="listitem">
  62. 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>.
  63. </li>
  64. <li class="listitem">
  65. Made the <code class="computeroutput"><span class="identifier">select</span></code> reactor
  66. more efficient on Windows for large numbers of sockets.
  67. </li>
  68. <li class="listitem">
  69. Fixed a Windows-specific type-aliasing issue reported by <code class="literal">gcc</code>.
  70. </li>
  71. <li class="listitem">
  72. Prevented execution of compile-time-only buffer test to avoid triggering
  73. an address sanitiser warning.
  74. </li>
  75. <li class="listitem">
  76. Disabled the <code class="computeroutput"><span class="identifier">GetQueuedCompletionStatus</span></code>
  77. timeout workaround on recent versions of Windows.
  78. </li>
  79. <li class="listitem">
  80. Changed implementation for Windows Runtime to use <code class="computeroutput"><span class="identifier">FormatMessageW</span></code>
  81. rather than <code class="computeroutput"><span class="identifier">FormatMessageA</span></code>,
  82. as the Windows store does not permit the latter.
  83. </li>
  84. <li class="listitem">
  85. Added support for string-based scope IDs when using link-local multicast
  86. addresses.
  87. </li>
  88. <li class="listitem">
  89. Changed IPv6 multicast group join to use the address's scope ID as the
  90. interface, if an interface is not explicitly specified.
  91. </li>
  92. <li class="listitem">
  93. Fixed multicast test failure on Mac OS X and the BSDs by using a link-local
  94. multicast address.
  95. </li>
  96. <li class="listitem">
  97. Various minor documentation improvements.
  98. </li>
  99. </ul></div>
  100. <h4>
  101. <a name="asio.history.h1"></a>
  102. <span><a name="asio.history.asio_1_10_1"></a></span><a class="link" href="history.html#asio.history.asio_1_10_1">Asio
  103. 1.10.1</a>
  104. </h4>
  105. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  106. <li class="listitem">
  107. Implemented a limited port to Windows Runtime. This support requires that
  108. the language extensions be enabled. Due to the restricted facilities exposed
  109. by the Windows Runtime API, the port also comes with the following caveats:
  110. <div class="itemizedlist"><ul class="itemizedlist" type="circle">
  111. <li class="listitem">
  112. The core facilities such as the <code class="computeroutput"><span class="identifier">io_service</span></code>,
  113. <code class="computeroutput"><span class="identifier">strand</span></code>, buffers,
  114. composed operations, timers, etc., should all work as normal.
  115. </li>
  116. <li class="listitem">
  117. For sockets, only client-side TCP is supported.
  118. </li>
  119. <li class="listitem">
  120. Explicit binding of a client-side TCP socket is not supported.
  121. </li>
  122. <li class="listitem">
  123. The <code class="computeroutput"><span class="identifier">cancel</span><span class="special">()</span></code>
  124. function is not supported for sockets. Asynchronous operations may
  125. only be cancelled by closing the socket.
  126. </li>
  127. <li class="listitem">
  128. Operations that use <code class="computeroutput"><span class="identifier">null_buffers</span></code>
  129. are not supported.
  130. </li>
  131. <li class="listitem">
  132. 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>
  133. options are supported.
  134. </li>
  135. <li class="listitem">
  136. Resolvers do not support service names, only numbers. I.e. you must
  137. use "80" rather than "http".
  138. </li>
  139. <li class="listitem">
  140. Most resolver query flags have no effect.
  141. </li>
  142. </ul></div>
  143. </li>
  144. <li class="listitem">
  145. Extended the ability to use Asio without Boost to include Microsoft Visual
  146. Studio 2012. When using a C++11 compiler, most of Asio may now be used
  147. without a dependency on Boost header files or libraries. To use Asio in
  148. this way, define <code class="computeroutput"><span class="identifier">ASIO_STANDALONE</span></code>
  149. on your compiler command line or as part of the project options. This standalone
  150. configuration has been tested for the following platforms and compilers:
  151. <div class="itemizedlist"><ul class="itemizedlist" type="circle">
  152. <li class="listitem">
  153. Microsoft Visual Studio 2012
  154. </li>
  155. <li class="listitem">
  156. Linux with g++ 4.7 or 4.8 (requires <code class="literal">-std=c++11</code>)
  157. </li>
  158. <li class="listitem">
  159. Mac OS X with clang++ / Xcode 4.6 (requires <code class="literal">-std=c++11 -stdlib=libc++</code>)
  160. </li>
  161. </ul></div>
  162. </li>
  163. <li class="listitem">
  164. Fixed a regression (introduced in 1.10.0) where, on some platforms, errors
  165. from <code class="computeroutput"><span class="identifier">async_connect</span></code> were
  166. not correctly propagated through to the completion handler.
  167. </li>
  168. <li class="listitem">
  169. Fixed a Windows-specific regression (introduced in 1.10.0) that occurs
  170. when multiple threads are running an <code class="computeroutput"><span class="identifier">io_service</span></code>.
  171. When the bug occurs, the result of an asynchronous operation (error and
  172. bytes tranferred) is incorrectly discarded and zero values used instead.
  173. For TCP sockets this results in spurious end-of-file notifications.
  174. </li>
  175. <li class="listitem">
  176. Fixed a bug in handler tracking, where it was not correctly printing out
  177. some handler IDs.
  178. </li>
  179. <li class="listitem">
  180. Fixed the comparison used to test for successful synchronous accept operations
  181. so that it works correctly with unsigned socket descriptors.
  182. </li>
  183. <li class="listitem">
  184. Ensured the signal number is correctly passed to the completion handler
  185. when starting an <code class="computeroutput"><span class="identifier">async_wait</span></code>
  186. on a signal that is already raised.
  187. </li>
  188. <li class="listitem">
  189. Suppressed a g++ 4.8+ warning about unused typedefs.
  190. </li>
  191. <li class="listitem">
  192. Enabled the move optimisation for handlers that use the default invocation
  193. hook.
  194. </li>
  195. <li class="listitem">
  196. Clarified that programs must not issue overlapping <code class="computeroutput"><span class="identifier">async_write_at</span></code>
  197. operations.
  198. </li>
  199. <li class="listitem">
  200. Changed the Windows <code class="computeroutput"><span class="identifier">HANDLE</span></code>
  201. backend to treat <code class="computeroutput"><span class="identifier">ERROR_MORE_DATA</span></code>
  202. as a non-fatal error when returned by <code class="computeroutput"><span class="identifier">GetOverlappedResult</span></code>
  203. for a synchronous read.
  204. </li>
  205. <li class="listitem">
  206. Visual C++ language extensions use <code class="computeroutput"><span class="identifier">generic</span></code>
  207. 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
  208. are in effect.
  209. </li>
  210. <li class="listitem">
  211. 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,
  212. the buffered stream templates have been updated so that they adhere to
  213. current handler patterns.
  214. </li>
  215. <li class="listitem">
  216. Enabled move support for Microsoft Visual Studio 2012.
  217. </li>
  218. <li class="listitem">
  219. Added <code class="computeroutput"><span class="identifier">use_future</span></code> support
  220. for Microsoft Visual Studio 2012.
  221. </li>
  222. <li class="listitem">
  223. 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
  224. a dependency on the <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">algorithm</span><span class="special">&gt;</span></code> header.
  225. </li>
  226. <li class="listitem">
  227. Eliminated some unnecessary handler copies.
  228. </li>
  229. <li class="listitem">
  230. 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.
  231. </li>
  232. <li class="listitem">
  233. Fixed various minor and cosmetic issues in code and documentation.
  234. </li>
  235. </ul></div>
  236. <h4>
  237. <a name="asio.history.h2"></a>
  238. <span><a name="asio.history.asio_1_10_0"></a></span><a class="link" href="history.html#asio.history.asio_1_10_0">Asio
  239. 1.10.0</a>
  240. </h4>
  241. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  242. <li class="listitem">
  243. Added new traits classes, <code class="computeroutput"><span class="identifier">handler_type</span></code>
  244. and <code class="computeroutput"><span class="identifier">async_result</span></code>, that
  245. allow the customisation of the return type of an initiating function.
  246. </li>
  247. <li class="listitem">
  248. Added the <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">spawn</span><span class="special">()</span></code>
  249. function, a high-level wrapper for running stackful coroutines, based on
  250. the Boost.Coroutine library. The <code class="computeroutput"><span class="identifier">spawn</span><span class="special">()</span></code> function enables programs to implement
  251. asynchronous logic in a synchronous manner. For example: <code class="computeroutput"><span class="identifier">size_t</span> <span class="identifier">n</span>
  252. <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
  253. Coroutines</a>.
  254. </li>
  255. <li class="listitem">
  256. 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
  257. 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>
  258. from an asynchronous operation's initiating function. For example: <code class="computeroutput"><span class="identifier">future</span><span class="special">&lt;</span><span class="identifier">size_t</span><span class="special">&gt;</span>
  259. <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++
  260. 2011 Support - Futures</a>.
  261. </li>
  262. <li class="listitem">
  263. Promoted the stackless coroutine class and macros to be part of Asio's
  264. documented interface, rather than part of the HTTP server 4 example. For
  265. further information, see <a class="link" href="overview/core/coroutine.html" title="Stackless Coroutines">Stackless
  266. Coroutines</a>.
  267. </li>
  268. <li class="listitem">
  269. Added a new handler hook called <code class="computeroutput"><span class="identifier">asio_handler_is_continuation</span></code>.
  270. Asynchronous operations may represent a continuation of the asynchronous
  271. control flow associated with the current executing handler. The <code class="computeroutput"><span class="identifier">asio_handler_is_continuation</span></code> hook can
  272. be customised to return <code class="computeroutput"><span class="keyword">true</span></code>
  273. if this is the case, and Asio's implementation can use this knowledge to
  274. optimise scheduling of the new handler. To cover common cases, Asio customises
  275. the hook for strands, <code class="computeroutput"><span class="identifier">spawn</span><span class="special">()</span></code> and composed asynchronous operations.
  276. </li>
  277. <li class="listitem">
  278. 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>,
  279. <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>
  280. and <code class="computeroutput"><span class="identifier">generic</span><span class="special">::</span><span class="identifier">stream_protocol</span></code>, which implement the
  281. <code class="computeroutput"><span class="identifier">Protocol</span></code> type requirements,
  282. but allow the user to specify the address family (e.g. <code class="computeroutput"><span class="identifier">AF_INET</span></code>)
  283. and protocol type (e.g. <code class="computeroutput"><span class="identifier">IPPROTO_TCP</span></code>)
  284. at runtime. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
  285. for Other Protocols</a>.
  286. </li>
  287. <li class="listitem">
  288. Added C++11 move constructors that allow the conversion of a socket (or
  289. 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>
  290. 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>
  291. via move construction. For further information, see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support
  292. for Other Protocols</a>.
  293. </li>
  294. <li class="listitem">
  295. Extended the <code class="computeroutput"><span class="identifier">basic_socket_acceptor</span><span class="special">&lt;&gt;</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
  296. be accepted directly into a socket of a more generic type. For example,
  297. 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
  298. <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,
  299. see <a class="link" href="overview/networking/other_protocols.html" title="Support for Other Protocols">Support for
  300. Other Protocols</a>.
  301. </li>
  302. <li class="listitem">
  303. Moved existing examples into a C++03-specific directory, and added a new
  304. directory for C++11-specific examples. A limited subset of the C++03 examples
  305. have been converted to their C++11 equivalents.
  306. </li>
  307. <li class="listitem">
  308. Add the ability to use Asio without Boost, for a limited set of platforms.
  309. When using a C++11 compiler, most of Asio may now be used without a dependency
  310. 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
  311. line or as part of the project options. This standalone configuration has
  312. currently been tested for the following platforms and compilers:
  313. <div class="itemizedlist"><ul class="itemizedlist" type="circle">
  314. <li class="listitem">
  315. Linux with g++ 4.7 (requires <code class="literal">-std=c++11</code>)
  316. </li>
  317. <li class="listitem">
  318. Mac OS X with clang++ / Xcode 4.6 (requires <code class="literal">-std=c++11 -stdlib=libc++</code>)
  319. </li>
  320. </ul></div>
  321. </li>
  322. <li class="listitem">
  323. Various SSL enhancements. Thanks go to Nick Jones, on whose work these
  324. changes are based.
  325. <div class="itemizedlist"><ul class="itemizedlist" type="circle">
  326. <li class="listitem">
  327. Added support for SSL handshakes with re-use of data already read
  328. 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">&lt;&gt;</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
  329. accept a <code class="computeroutput"><span class="identifier">ConstBufferSequence</span></code>
  330. to be used as initial input to the ssl engine for the handshake procedure.
  331. </li>
  332. <li class="listitem">
  333. 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>
  334. objects.
  335. </li>
  336. <li class="listitem">
  337. 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>
  338. and <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">stream</span><span class="special">&lt;&gt;</span></code>
  339. classes.
  340. </li>
  341. <li class="listitem">
  342. Added the ability to load SSL certificate and key data from memory
  343. 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.
  344. </li>
  345. <li class="listitem">
  346. Changed <code class="computeroutput"><span class="identifier">ssl</span><span class="special">::</span><span class="identifier">context</span></code> to automatically disable
  347. 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>
  348. 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>.
  349. </li>
  350. </ul></div>
  351. </li>
  352. <li class="listitem">
  353. Fixed a potential deadlock in <code class="computeroutput"><span class="identifier">signal_set</span></code>
  354. implementation.
  355. </li>
  356. <li class="listitem">
  357. Fixed an error in acceptor example in documentation.
  358. </li>
  359. <li class="listitem">
  360. Fixed copy-paste errors in waitable timer documentation.
  361. </li>
  362. <li class="listitem">
  363. Added assertions to satisfy some code analysis tools.
  364. </li>
  365. <li class="listitem">
  366. Fixed a malformed <code class="computeroutput"><span class="preprocessor">#warning</span></code>
  367. directive.
  368. </li>
  369. <li class="listitem">
  370. Fixed a potential data race in the Linux <code class="computeroutput"><span class="identifier">epoll</span></code>
  371. implementation.
  372. </li>
  373. <li class="listitem">
  374. Fixed a Windows-specific bug, where certain operations might generate an
  375. <code class="computeroutput"><span class="identifier">error_code</span></code> with an invalid
  376. (i.e. <code class="computeroutput"><span class="identifier">NULL</span></code>) <code class="computeroutput"><span class="identifier">error_category</span></code>.
  377. </li>
  378. <li class="listitem">
  379. Fixed <code class="computeroutput"><span class="identifier">basic_waitable_timer</span></code>'s
  380. underlying implementation so that it can handle any <code class="computeroutput"><span class="identifier">time_point</span></code>
  381. value without overflowing the intermediate duration objects.
  382. </li>
  383. <li class="listitem">
  384. Fixed a problem with lost thread wakeups that can occur when making concurrent
  385. calls to <code class="computeroutput"><span class="identifier">run</span><span class="special">()</span></code>
  386. and <code class="computeroutput"><span class="identifier">poll</span><span class="special">()</span></code>
  387. on the same <code class="computeroutput"><span class="identifier">io_service</span></code>
  388. object.
  389. </li>
  390. <li class="listitem">
  391. Fixed implementation of asynchronous connect operation so that it can cope
  392. with spurious readiness notifications from the reactor.
  393. </li>
  394. <li class="listitem">
  395. 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>
  396. class.
  397. </li>
  398. <li class="listitem">
  399. Added a mechanism for disabling automatic Winsock initialisation. See the
  400. header file <code class="literal">asio/detail/winsock_init.hpp</code> for details.
  401. </li>
  402. </ul></div>
  403. <h4>
  404. <a name="asio.history.h3"></a>
  405. <span><a name="asio.history.asio_1_8_3"></a></span><a class="link" href="history.html#asio.history.asio_1_8_3">Asio
  406. 1.8.3</a>
  407. </h4>
  408. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  409. <li class="listitem">
  410. Fixed some 64-to-32-bit conversion warnings.
  411. </li>
  412. <li class="listitem">
  413. Fixed various small errors in documentation and comments.
  414. </li>
  415. <li class="listitem">
  416. 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
  417. documentation.
  418. </li>
  419. <li class="listitem">
  420. Changed to use <code class="computeroutput"><span class="keyword">long</span></code> rather
  421. than <code class="computeroutput"><span class="keyword">int</span></code> for SSL_CTX options,
  422. to match OpenSSL.
  423. </li>
  424. <li class="listitem">
  425. Changed to use <code class="computeroutput"><span class="identifier">_snwprintf</span></code>
  426. to address a compile error due to the changed <code class="computeroutput"><span class="identifier">swprintf</span></code>
  427. signature in recent versions of MinGW.
  428. </li>
  429. <li class="listitem">
  430. Fixed a deadlock that can occur on Windows when shutting down a pool of
  431. <code class="computeroutput"><span class="identifier">io_service</span></code> threads due
  432. to running out of work.
  433. </li>
  434. <li class="listitem">
  435. Changed UNIX domain socket example to treat errors from <code class="computeroutput"><span class="identifier">accept</span></code>
  436. as non-fatal.
  437. </li>
  438. <li class="listitem">
  439. Added a small block recycling optimisation to improve default memory allocation
  440. behaviour.
  441. </li>
  442. </ul></div>
  443. <h4>
  444. <a name="asio.history.h4"></a>
  445. <span><a name="asio.history.asio_1_8_2"></a></span><a class="link" href="history.html#asio.history.asio_1_8_2">Asio
  446. 1.8.2</a>
  447. </h4>
  448. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  449. <li class="listitem">
  450. 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>
  451. and C++11.
  452. </li>
  453. <li class="listitem">
  454. Decorated GCC attribute names with underscores to prevent interaction with
  455. user-defined macros.
  456. </li>
  457. <li class="listitem">
  458. Added missing <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cctype</span><span class="special">&gt;</span></code>, needed for some versions of MinGW.
  459. </li>
  460. <li class="listitem">
  461. Changed to use <code class="literal">gcc</code>'s atomic builtins on ARM CPUs, when
  462. available.
  463. </li>
  464. <li class="listitem">
  465. Changed strand destruction to be a no-op, to allow strand objects to be
  466. destroyed after their associated <code class="computeroutput"><span class="identifier">io_service</span></code>
  467. has been destroyed.
  468. </li>
  469. <li class="listitem">
  470. 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>
  471. function but always fail with ENOSYS.
  472. </li>
  473. <li class="listitem">
  474. Changed the SSL implementation to throw an exception if SSL engine initialisation
  475. fails.
  476. </li>
  477. <li class="listitem">
  478. Fixed another regression in <code class="computeroutput"><span class="identifier">buffered_write_stream</span></code>.
  479. </li>
  480. <li class="listitem">
  481. Implemented various minor performance improvements, primarily targeted
  482. at Linux x86 and x86-64 platforms.
  483. </li>
  484. </ul></div>
  485. <h4>
  486. <a name="asio.history.h5"></a>
  487. <span><a name="asio.history.asio_1_8_1"></a></span><a class="link" href="history.html#asio.history.asio_1_8_1">Asio
  488. 1.8.1</a>
  489. </h4>
  490. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  491. <li class="listitem">
  492. Changed the <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
  493. backend to do lazy registration for <code class="computeroutput"><span class="identifier">EPOLLOUT</span></code>
  494. events.
  495. </li>
  496. <li class="listitem">
  497. Fixed the <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
  498. handling of out-of-band data, which was broken by an incomplete fix in
  499. the last release.
  500. </li>
  501. <li class="listitem">
  502. Changed Asio's SSL wrapper to respect OpenSSL's <code class="computeroutput"><span class="identifier">OPENSSL_NO_ENGINE</span></code>
  503. feature test <code class="computeroutput"><span class="preprocessor">#define</span></code>.
  504. </li>
  505. <li class="listitem">
  506. 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
  507. compilers that support C++11 move semantics (such as <code class="literal">g++</code>).
  508. </li>
  509. <li class="listitem">
  510. Improved the performance of strand rescheduling.
  511. </li>
  512. <li class="listitem">
  513. Added support for <code class="literal">g++</code> 4.7 when compiling in C++11 mode.
  514. </li>
  515. <li class="listitem">
  516. Fixed a problem where <code class="computeroutput"><span class="identifier">signal_set</span></code>
  517. handlers were not being delivered when the <code class="computeroutput"><span class="identifier">io_service</span></code>
  518. was constructed with a <code class="computeroutput"><span class="identifier">concurrency_hint</span></code>
  519. of 1.
  520. </li>
  521. </ul></div>
  522. <h4>
  523. <a name="asio.history.h6"></a>
  524. <span><a name="asio.history.asio_1_8_0"></a></span><a class="link" href="history.html#asio.history.asio_1_8_0">Asio
  525. 1.8.0</a>
  526. </h4>
  527. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  528. <li class="listitem">
  529. Added a new class template <code class="computeroutput"><span class="identifier">basic_waitable_timer</span></code>
  530. based around the C++11 clock type requirements. It may be used with the
  531. clocks from the C++11 <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">chrono</span><span class="special">&gt;</span></code>
  532. library facility or, if those are not available, Boost.Chrono. The typedefs
  533. <code class="computeroutput"><span class="identifier">high_resolution_timer</span></code>,
  534. <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
  535. objects for the standard clock types.
  536. </li>
  537. <li class="listitem">
  538. 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
  539. on Windows kernel objects. Thanks go to Boris Schaeling for contributing
  540. substantially to the development of this feature.
  541. </li>
  542. <li class="listitem">
  543. On Linux, <code class="computeroutput"><span class="identifier">connect</span><span class="special">()</span></code>
  544. can return EAGAIN in certain circumstances. Remapped this to another error
  545. so that it doesn't look like a non-blocking operation.
  546. </li>
  547. <li class="listitem">
  548. Fixed a compile error on NetBSD.
  549. </li>
  550. <li class="listitem">
  551. Fixed deadlock on Mac OS X.
  552. </li>
  553. <li class="listitem">
  554. Fixed a regression in <code class="computeroutput"><span class="identifier">buffered_write_stream</span></code>.
  555. </li>
  556. <li class="listitem">
  557. Fixed a non-paged pool "leak" on Windows when an <code class="computeroutput"><span class="identifier">io_service</span></code> is repeatedly run without
  558. anything to do.
  559. </li>
  560. <li class="listitem">
  561. Reverted earlier change to allow some speculative operations to be performed
  562. without holding the lock, as it introduced a race condition in some multithreaded
  563. scenarios.
  564. </li>
  565. <li class="listitem">
  566. Fixed a bug where the second buffer in an array of two buffers may be ignored
  567. if the first buffer is empty.
  568. </li>
  569. </ul></div>
  570. <h4>
  571. <a name="asio.history.h7"></a>
  572. <span><a name="asio.history.asio_1_6_1"></a></span><a class="link" href="history.html#asio.history.asio_1_6_1">Asio
  573. 1.6.1</a>
  574. </h4>
  575. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  576. <li class="listitem">
  577. Implemented various performance improvements, including:
  578. <div class="itemizedlist"><ul class="itemizedlist" type="circle">
  579. <li class="listitem">
  580. Using thread-local operation queues in single-threaded use cases
  581. (i.e. when <code class="computeroutput"><span class="identifier">concurrency_hint</span></code>
  582. is 1) to eliminate a lock/unlock pair.
  583. </li>
  584. <li class="listitem">
  585. Allowing some <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
  586. speculative operations to be performed without holding the lock.
  587. </li>
  588. <li class="listitem">
  589. Improving locality of reference by performing an <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>'s
  590. I/O operation immediately before the corresponding handler is called.
  591. This also improves scalability across CPUs when multiple threads
  592. are running the <code class="computeroutput"><span class="identifier">io_service</span></code>.
  593. </li>
  594. <li class="listitem">
  595. Specialising asynchronous read and write operations for buffer sequences
  596. that are arrays (<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">array</span></code>
  597. or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">array</span></code>) of exactly two buffers.
  598. </li>
  599. </ul></div>
  600. </li>
  601. <li class="listitem">
  602. Fixed a compile error in the regex overload of <code class="computeroutput"><span class="identifier">async_read_until</span></code>.
  603. </li>
  604. <li class="listitem">
  605. Fixed a Windows-specific compile error by explicitly specifying the <code class="computeroutput"><span class="identifier">signal</span><span class="special">()</span></code>
  606. function from the global namespace.
  607. </li>
  608. <li class="listitem">
  609. Changed the <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
  610. implementation so that it does not read the clock unless the timer heap
  611. is non-empty.
  612. </li>
  613. <li class="listitem">
  614. Changed the SSL stream's buffers' sizes so that they are large enough to
  615. hold a complete TLS record.
  616. </li>
  617. <li class="listitem">
  618. Fixed the behaviour of the synchronous <code class="computeroutput"><span class="identifier">null_buffers</span></code>
  619. operations so that they obey the user's non-blocking setting.
  620. </li>
  621. <li class="listitem">
  622. Changed to set the size of the select <code class="computeroutput"><span class="identifier">fd_set</span></code>
  623. at runtime when using Windows.
  624. </li>
  625. <li class="listitem">
  626. Disabled an MSVC warning due to const qualifier being applied to function
  627. type.
  628. </li>
  629. <li class="listitem">
  630. Fixed a crash that occurs when using the Intel C++ compiler.
  631. </li>
  632. <li class="listitem">
  633. Changed the initialisation of the OpenSSL library so that it supports all
  634. available algorithms.
  635. </li>
  636. <li class="listitem">
  637. Fixed the SSL error mapping used when the session is gracefully shut down.
  638. </li>
  639. <li class="listitem">
  640. Added some latency test programs.
  641. </li>
  642. <li class="listitem">
  643. Clarified that a read operation ends when the buffer is full.
  644. </li>
  645. <li class="listitem">
  646. Fixed an exception safety issue in <code class="computeroutput"><span class="identifier">epoll_reactor</span></code>
  647. initialisation.
  648. </li>
  649. <li class="listitem">
  650. 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>
  651. to the desired number.
  652. </li>
  653. <li class="listitem">
  654. 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>
  655. flag which switches the allocation of strand implementations to use a round-robin
  656. approach rather than hashing.
  657. </li>
  658. <li class="listitem">
  659. 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>
  660. is used.
  661. </li>
  662. </ul></div>
  663. <h4>
  664. <a name="asio.history.h8"></a>
  665. <span><a name="asio.history.asio_1_6_0"></a></span><a class="link" href="history.html#asio.history.asio_1_6_0">Asio
  666. 1.6.0</a>
  667. </h4>
  668. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  669. <li class="listitem">
  670. Improved support for C++0x move construction to further reduce copying
  671. of handler objects. In certain designs it is possible to eliminate virtually
  672. all copies. Move support is now enabled when compiling in <code class="literal">-std=c++0x</code>
  673. mode on g++ 4.5 or higher.
  674. </li>
  675. <li class="listitem">
  676. Added build support for platforms that don't provide either of <code class="computeroutput"><span class="identifier">signal</span><span class="special">()</span></code>
  677. or <code class="computeroutput"><span class="identifier">sigaction</span><span class="special">()</span></code>.
  678. </li>
  679. <li class="listitem">
  680. Changed to use C++0x variadic templates when they are available, rather
  681. than generating function overloads using the Boost.Preprocessor library.
  682. </li>
  683. <li class="listitem">
  684. Ensured the value of <code class="computeroutput"><span class="identifier">errno</span></code>
  685. is preserved across the implementation's signal handler.
  686. </li>
  687. <li class="listitem">
  688. On Windows, ensured the count of outstanding work is decremented for abandoned
  689. operations (i.e. operations that are being cleaned up within the <code class="computeroutput"><span class="identifier">io_service</span></code> destructor).
  690. </li>
  691. <li class="listitem">
  692. Fixed behaviour of zero-length reads and writes in the new SSL implementation.
  693. </li>
  694. <li class="listitem">
  695. Added support for building with OpenSSL 1.0 when <code class="computeroutput"><span class="identifier">OPENSSL_NO_SSL2</span></code>
  696. is defined.
  697. </li>
  698. <li class="listitem">
  699. Changed most examples to treat a failure by an accept operation as non-fatal.
  700. </li>
  701. <li class="listitem">
  702. Fixed an error in the <code class="literal">tick_count_timer</code> example by making
  703. the duration type signed. Previously, a wait on an already-passed deadline
  704. would not return for a very long time.
  705. </li>
  706. </ul></div>
  707. <h4>
  708. <a name="asio.history.h9"></a>
  709. <span><a name="asio.history.asio_1_5_3"></a></span><a class="link" href="history.html#asio.history.asio_1_5_3">Asio
  710. 1.5.3</a>
  711. </h4>
  712. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  713. <li class="listitem">
  714. Added a new, completely rewritten SSL implementation. The new implementation
  715. compiles faster, shows substantially improved performance, and supports
  716. custom memory allocation and handler invocation. It includes new API features
  717. such as certificate verification callbacks and has improved error reporting.
  718. The new implementation is source-compatible with the old for most uses.
  719. However, if necessary, the old implementation may still be used by defining
  720. <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>.
  721. </li>
  722. <li class="listitem">
  723. Added new <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">buffer</span><span class="special">()</span></code>
  724. 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
  725. automatically enabled when compiling in <code class="literal">-std=c++0x</code> mode
  726. on g++ 4.3 or higher, or when using MSVC 10. The support may be explicitly
  727. 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>,
  728. 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>.
  729. </li>
  730. <li class="listitem">
  731. Changed to use the C++0x standard library templates <code class="computeroutput"><span class="identifier">array</span></code>,
  732. <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>
  733. when they are available, rather than the Boost equivalents.
  734. </li>
  735. <li class="listitem">
  736. 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>
  737. is no longer enabled by default for g++ 4.5, as that compiler's standard
  738. 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.
  739. </li>
  740. </ul></div>
  741. <h4>
  742. <a name="asio.history.h10"></a>
  743. <span><a name="asio.history.asio_1_5_2"></a></span><a class="link" href="history.html#asio.history.asio_1_5_2">Asio
  744. 1.5.2</a>
  745. </h4>
  746. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  747. <li class="listitem">
  748. Added support for C++0x move construction and assignment to sockets, serial
  749. ports, POSIX descriptors and Windows handles.
  750. </li>
  751. <li class="listitem">
  752. 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>
  753. 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>
  754. at the appropriate times. Two new examples have been added showing how
  755. to use this feature.
  756. </li>
  757. <li class="listitem">
  758. 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
  759. 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>,
  760. but if it does then set the blocking mode and restart the call. If any
  761. other error occurs, assume the descriptor is closed.
  762. </li>
  763. <li class="listitem">
  764. The kqueue flag <code class="computeroutput"><span class="identifier">EV_ONESHOT</span></code>
  765. 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
  766. the <code class="computeroutput"><span class="identifier">close</span><span class="special">()</span></code>
  767. system call. Changed the kqueue backend to use <code class="computeroutput"><span class="identifier">EV_CLEAR</span></code>
  768. instead.
  769. </li>
  770. <li class="listitem">
  771. Changed exception reporting to include the function name in exception
  772. <code class="computeroutput"><span class="identifier">what</span><span class="special">()</span></code>
  773. messages.
  774. </li>
  775. <li class="listitem">
  776. Fixed an insufficient initialisers warning with MinGW.
  777. </li>
  778. <li class="listitem">
  779. Changed the <code class="computeroutput"><span class="identifier">shutdown_service</span><span class="special">()</span></code> member functions to be private.
  780. </li>
  781. <li class="listitem">
  782. Added archetypes for testing socket option functions.
  783. </li>
  784. <li class="listitem">
  785. 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>.
  786. </li>
  787. <li class="listitem">
  788. Fixed a copy/paste error in <code class="computeroutput"><span class="identifier">SignalHandler</span></code>
  789. example.
  790. </li>
  791. <li class="listitem">
  792. 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>
  793. so that constants like <code class="computeroutput"><span class="identifier">NSIG</span></code>
  794. may be used.
  795. </li>
  796. <li class="listitem">
  797. Changed the <code class="computeroutput"><span class="identifier">signal_set_service</span></code>
  798. implementation so that it doesn't assume that <code class="computeroutput"><span class="identifier">SIGRTMAX</span></code>
  799. is a compile-time constant.
  800. </li>
  801. <li class="listitem">
  802. Changed the Boost.Asio examples so that they don't use Boost.Thread's convenience
  803. header. Use the header file that is specifically for the boost::thread
  804. class instead.
  805. </li>
  806. </ul></div>
  807. <h4>
  808. <a name="asio.history.h11"></a>
  809. <span><a name="asio.history.asio_1_5_1"></a></span><a class="link" href="history.html#asio.history.asio_1_5_1">Asio
  810. 1.5.1</a>
  811. </h4>
  812. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  813. <li class="listitem">
  814. 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
  815. 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
  816. be called when one of the signals occurs. The same signal number may registered
  817. with multiple <code class="computeroutput"><span class="identifier">signal_set</span></code>
  818. objects, however the signal number must be used only with Asio.
  819. </li>
  820. <li class="listitem">
  821. Added handler tracking, a new debugging aid. When enabled by defining
  822. <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>,
  823. Asio writes debugging output to the standard error stream. The output records
  824. asynchronous operations and the relationships between their handlers. It
  825. may be post-processed using the included <code class="literal">handlerviz.pl</code>
  826. tool to create a visual representation of the handlers (requires GraphViz).
  827. </li>
  828. <li class="listitem">
  829. 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
  830. 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
  831. 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
  832. when the streambuf is populated by the Asio free functions <code class="computeroutput"><span class="identifier">read</span><span class="special">()</span></code>,
  833. <code class="computeroutput"><span class="identifier">async_read</span><span class="special">()</span></code>,
  834. <code class="computeroutput"><span class="identifier">read_until</span><span class="special">()</span></code>
  835. or <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>.)
  836. </li>
  837. <li class="listitem">
  838. Fixed a bug on kqueue-based platforms, where reactor read operations that
  839. return false from their <code class="computeroutput"><span class="identifier">perform</span><span class="special">()</span></code> function are not correctly re-registered
  840. with kqueue.
  841. </li>
  842. <li class="listitem">
  843. 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>
  844. is no longer enabled by default for MSVC10, as that compiler's standard
  845. 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.
  846. </li>
  847. <li class="listitem">
  848. Modified the <code class="computeroutput"><span class="identifier">buffers_iterator</span><span class="special">&lt;&gt;</span></code> and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">basic_resolver_iterator</span></code>
  849. classes so that the value_type typedefs are non-const byte types.
  850. </li>
  851. </ul></div>
  852. <h4>
  853. <a name="asio.history.h12"></a>
  854. <span><a name="asio.history.asio_1_5_0"></a></span><a class="link" href="history.html#asio.history.asio_1_5_0">Asio
  855. 1.5.0</a>
  856. </h4>
  857. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  858. <li class="listitem">
  859. 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>.
  860. 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
  861. which occur past the deadline will put the iostream into a bad state.
  862. </li>
  863. <li class="listitem">
  864. Added a new <code class="computeroutput"><span class="identifier">error</span><span class="special">()</span></code>
  865. member function to socket iostreams, for retrieving the error code from
  866. the most recent system call.
  867. </li>
  868. <li class="listitem">
  869. 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
  870. a single waiting handler on a timer. Handlers are cancelled in FIFO order.
  871. </li>
  872. <li class="listitem">
  873. Added a new <code class="computeroutput"><span class="identifier">transfer_exactly</span><span class="special">()</span></code> completion condition. This can be used
  874. to send or receive a specified number of bytes even if the total size of
  875. the buffer (or buffer sequence) is larger.
  876. </li>
  877. <li class="listitem">
  878. 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
  879. a list until the socket is successfully connected.
  880. </li>
  881. <li class="listitem">
  882. Extended the <code class="computeroutput"><span class="identifier">buffer_size</span><span class="special">()</span></code> function so that it works for buffer
  883. sequences in addition to individual buffers.
  884. </li>
  885. <li class="listitem">
  886. 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
  887. raw bytes between individual buffers and buffer sequences.
  888. </li>
  889. <li class="listitem">
  890. 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.
  891. </li>
  892. <li class="listitem">
  893. Added friendlier compiler errors for when a completion handler does not
  894. meet the necessary type requirements. When C++0x is available (currently
  895. supported for g++ 4.5 or later, and MSVC 10), <code class="computeroutput"><span class="keyword">static_assert</span></code>
  896. is also used to generate an informative error message. This checking may
  897. 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>.
  898. </li>
  899. <li class="listitem">
  900. Added support for using <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">error_code</span></code>
  901. and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">system_error</span></code>, when available. The support
  902. is automatically enabled when compiling in <code class="literal">-std=c++0x</code>
  903. mode on g++ 4.5 or higher, or when using MSVC 10. The support may be explicitly
  904. enabled by defining <code class="computeroutput"><span class="identifier">ASIO_HAS_STD_SYSTEM_ERROR</span></code>,
  905. or disabled by defining <code class="computeroutput"><span class="identifier">ASIO_DISABLE_STD_SYSTEM_ERROR</span></code>.
  906. (Available in non-Boost version of Asio only.)
  907. </li>
  908. <li class="listitem">
  909. Made the <code class="computeroutput"><span class="identifier">is_loopback</span><span class="special">()</span></code>,
  910. <code class="computeroutput"><span class="identifier">is_unspecified</span><span class="special">()</span></code>
  911. and <code class="computeroutput"><span class="identifier">is_multicast</span><span class="special">()</span></code>
  912. functions consistently available across the <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">address</span></code>,
  913. <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>
  914. classes.
  915. </li>
  916. <li class="listitem">
  917. Added new <code class="computeroutput"><span class="identifier">non_blocking</span><span class="special">()</span></code> functions for managing the non-blocking
  918. 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>
  919. are now deprecated in favour of these new functions.
  920. </li>
  921. <li class="listitem">
  922. Added new <code class="computeroutput"><span class="identifier">native_non_blocking</span><span class="special">()</span></code> functions for managing the non-blocking
  923. mode of the underlying socket or descriptor. These functions are intended
  924. to allow the encapsulation of arbitrary non-blocking system calls as asynchronous
  925. operations, in a way that is transparent to the user of the socket object.
  926. The functions have no effect on the behaviour of the synchronous operations
  927. of the socket or descriptor.
  928. </li>
  929. <li class="listitem">
  930. Added the <code class="computeroutput"><span class="identifier">io_control</span><span class="special">()</span></code>
  931. member function for socket acceptors.
  932. </li>
  933. <li class="listitem">
  934. 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>
  935. member functions in favour of <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code>.
  936. </li>
  937. <li class="listitem">
  938. Added a <code class="computeroutput"><span class="identifier">release</span><span class="special">()</span></code>
  939. member function to posix descriptors. This function releases ownership
  940. of the underlying native descriptor to the caller.
  941. </li>
  942. <li class="listitem">
  943. Added support for sequenced packet sockets (<code class="computeroutput"><span class="identifier">SOCK_SEQPACKET</span></code>).
  944. </li>
  945. <li class="listitem">
  946. 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
  947. whether the <code class="computeroutput"><span class="identifier">io_service</span></code>
  948. 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
  949. to <code class="computeroutput"><span class="identifier">run</span><span class="special">()</span></code>,
  950. <code class="computeroutput"><span class="identifier">run_one</span><span class="special">()</span></code>,
  951. <code class="computeroutput"><span class="identifier">poll</span><span class="special">()</span></code>
  952. or <code class="computeroutput"><span class="identifier">poll_one</span><span class="special">()</span></code>).
  953. </li>
  954. <li class="listitem">
  955. Reduced the copying of handler function objects.
  956. </li>
  957. <li class="listitem">
  958. Added support for C++0x move construction to further reduce copying of
  959. handler objects. Move support is enabled when compiling in <code class="literal">-std=c++0x</code>
  960. mode on g++ 4.5 or higher, or when using MSVC10.
  961. </li>
  962. <li class="listitem">
  963. Removed the dependency on OS-provided macros for the well-known IPv4 and
  964. IPv6 addresses. This should eliminate the annoying "missing braces
  965. around initializer" warnings.
  966. </li>
  967. <li class="listitem">
  968. 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">&lt;&gt;</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>).
  969. </li>
  970. <li class="listitem">
  971. Changed the reactor backends to assume that any descriptors or sockets
  972. added using <code class="computeroutput"><span class="identifier">assign</span><span class="special">()</span></code>
  973. may have been <code class="computeroutput"><span class="identifier">dup</span><span class="special">()</span></code>-ed,
  974. and so require explicit deregistration from the reactor.
  975. </li>
  976. <li class="listitem">
  977. Changed the SSL error category to return error strings from the OpenSSL
  978. library.
  979. </li>
  980. <li class="listitem">
  981. Changed the separate compilation support such that, to use Asio's SSL capabilities,
  982. you should also include 'asio/ssl/impl/src.hpp` in one source file in your
  983. program.
  984. </li>
  985. <li class="listitem">
  986. 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.
  987. </li>
  988. <li class="listitem">
  989. Removed the deprecated typedefs <code class="computeroutput"><span class="identifier">resolver_query</span></code>
  990. and <code class="computeroutput"><span class="identifier">resolver_iterator</span></code> from
  991. 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>
  992. and <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">icmp</span></code> classes.
  993. </li>
  994. <li class="listitem">
  995. Fixed a compile error on some versions of g++ due to anonymous enums.
  996. </li>
  997. <li class="listitem">
  998. Added an explicit cast to the <code class="computeroutput"><span class="identifier">FIONBIO</span></code>
  999. constant to int to suppress a compiler warning on some platforms.
  1000. </li>
  1001. <li class="listitem">
  1002. Fixed warnings reported by g++'s <code class="literal">-Wshadow</code> compiler option.
  1003. </li>
  1004. </ul></div>
  1005. <h4>
  1006. <a name="asio.history.h13"></a>
  1007. <span><a name="asio.history.asio_1_4_8"></a></span><a class="link" href="history.html#asio.history.asio_1_4_8">Asio
  1008. 1.4.8</a>
  1009. </h4>
  1010. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1011. <li class="listitem">
  1012. 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.
  1013. </li>
  1014. <li class="listitem">
  1015. 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
  1016. delivery of <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
  1017. handlers, after the program has been running for some time.
  1018. </li>
  1019. </ul></div>
  1020. <h4>
  1021. <a name="asio.history.h14"></a>
  1022. <span><a name="asio.history.asio_1_4_7"></a></span><a class="link" href="history.html#asio.history.asio_1_4_7">Asio
  1023. 1.4.7</a>
  1024. </h4>
  1025. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1026. <li class="listitem">
  1027. Fixed a problem on kqueue-based platforms where a <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
  1028. may never fire if the <code class="computeroutput"><span class="identifier">io_service</span></code>
  1029. is running in a background thread.
  1030. </li>
  1031. <li class="listitem">
  1032. Fixed a const-correctness issue that prevented valid uses of <code class="computeroutput"><span class="identifier">has_service</span><span class="special">&lt;&gt;</span></code>
  1033. from compiling.
  1034. </li>
  1035. <li class="listitem">
  1036. Fixed MinGW cross-compilation.
  1037. </li>
  1038. <li class="listitem">
  1039. Removed dependency on deprecated Boost.System functions (Boost.Asio only).
  1040. </li>
  1041. <li class="listitem">
  1042. 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>
  1043. failures are correctly propagated.
  1044. </li>
  1045. <li class="listitem">
  1046. Added a check for errors returned by <code class="computeroutput"><span class="identifier">InitializeCriticalSectionAndSpinCount</span></code>.
  1047. </li>
  1048. <li class="listitem">
  1049. Added support for hardware flow control on QNX.
  1050. </li>
  1051. <li class="listitem">
  1052. Always use <code class="computeroutput"><span class="identifier">pselect</span><span class="special">()</span></code>
  1053. on HP-UX, if it is available.
  1054. </li>
  1055. <li class="listitem">
  1056. Ensured handler arguments are passed as lvalues.
  1057. </li>
  1058. <li class="listitem">
  1059. Fixed Windows build when thread support is disabled.
  1060. </li>
  1061. <li class="listitem">
  1062. Fixed a Windows-specific problem where <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
  1063. objects with expiry times set more than 5 minutes in the future may never
  1064. expire.
  1065. </li>
  1066. <li class="listitem">
  1067. Fixed the resolver backend on BSD platforms so that an empty service name
  1068. resolves to port number <code class="computeroutput"><span class="number">0</span></code>,
  1069. as per the documentation.
  1070. </li>
  1071. <li class="listitem">
  1072. Fixed read operations so that they do not accept buffer sequences of type
  1073. <code class="computeroutput"><span class="identifier">const_buffers_1</span></code>.
  1074. </li>
  1075. <li class="listitem">
  1076. Redefined <code class="computeroutput"><span class="identifier">Protocol</span></code> and
  1077. <code class="computeroutput"><span class="identifier">id</span></code> to avoid clashing with
  1078. Objective-C++ keywords.
  1079. </li>
  1080. <li class="listitem">
  1081. Fixed a <code class="computeroutput"><span class="identifier">vector</span></code> reallocation
  1082. performance issue that can occur when there are many active <code class="computeroutput"><span class="identifier">deadline_timer</span></code> objects.
  1083. </li>
  1084. <li class="listitem">
  1085. Fixed the kqueue backend so that it compiles on NetBSD.
  1086. </li>
  1087. <li class="listitem">
  1088. 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
  1089. BSD platforms.
  1090. </li>
  1091. <li class="listitem">
  1092. 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.
  1093. </li>
  1094. <li class="listitem">
  1095. 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>
  1096. 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>.
  1097. </li>
  1098. </ul></div>
  1099. <h4>
  1100. <a name="asio.history.h15"></a>
  1101. <span><a name="asio.history.asio_1_4_6"></a></span><a class="link" href="history.html#asio.history.asio_1_4_6">Asio
  1102. 1.4.6</a>
  1103. </h4>
  1104. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1105. <li class="listitem">
  1106. Reduced compile times. (Note that some programs may need to add additional
  1107. <code class="computeroutput"><span class="preprocessor">#include</span></code>s, e.g. if the
  1108. program uses boost::array but does not explicitly include <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>.)
  1109. </li>
  1110. <li class="listitem">
  1111. Reduced the size of generated code.
  1112. </li>
  1113. <li class="listitem">
  1114. Refactored <code class="computeroutput"><span class="identifier">deadline_timer</span></code>
  1115. implementation to improve performance.
  1116. </li>
  1117. <li class="listitem">
  1118. Improved multiprocessor scalability on Windows by using a dedicated hidden
  1119. thread to wait for timers.
  1120. </li>
  1121. <li class="listitem">
  1122. Improved performance of <code class="computeroutput"><span class="identifier">asio</span><span class="special">::</span><span class="identifier">streambuf</span></code>
  1123. with <code class="computeroutput"><span class="identifier">async_read</span><span class="special">()</span></code>
  1124. and <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>.
  1125. These read operations now use the existing capacity of the <code class="computeroutput"><span class="identifier">streambuf</span></code> when reading, rather than limiting
  1126. the read to 512 bytes.
  1127. </li>
  1128. <li class="listitem">
  1129. 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>
  1130. 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>
  1131. 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>
  1132. may be defined to build a separately-compiled Asio as part of a shared
  1133. library.
  1134. </li>
  1135. <li class="listitem">
  1136. 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>
  1137. to permit the disabling of memory fences around completion handlers, even
  1138. if thread support is enabled.
  1139. </li>
  1140. <li class="listitem">
  1141. Reworked timeout examples to better illustrate typical use cases.
  1142. </li>
  1143. <li class="listitem">
  1144. Ensured that handler arguments are passed as const types.
  1145. </li>
  1146. <li class="listitem">
  1147. Fixed incorrect parameter order in <code class="computeroutput"><span class="identifier">null_buffers</span></code>
  1148. variant of <code class="computeroutput"><span class="identifier">async_send_to</span></code>.
  1149. </li>
  1150. <li class="listitem">
  1151. Ensured unsigned char is used with <code class="computeroutput"><span class="identifier">isdigit</span></code>
  1152. in <code class="computeroutput"><span class="identifier">getaddrinfo</span></code> emulation.
  1153. </li>
  1154. <li class="listitem">
  1155. Fixed handling of very small but non-zero timeouts.
  1156. </li>
  1157. <li class="listitem">
  1158. Fixed crash that occurred when an empty buffer sequence was passed to a
  1159. composed read or write operation.
  1160. </li>
  1161. <li class="listitem">
  1162. Added missing operator+ overload in <code class="computeroutput"><span class="identifier">buffers_iterator</span></code>.
  1163. </li>
  1164. <li class="listitem">
  1165. Implemented cancellation of <code class="computeroutput"><span class="identifier">null_buffers</span></code>
  1166. operations on Windows.
  1167. </li>
  1168. </ul></div>
  1169. <h4>
  1170. <a name="asio.history.h16"></a>
  1171. <span><a name="asio.history.asio_1_4_5"></a></span><a class="link" href="history.html#asio.history.asio_1_4_5">Asio
  1172. 1.4.5</a>
  1173. </h4>
  1174. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1175. <li class="listitem">
  1176. Improved performance.
  1177. </li>
  1178. <li class="listitem">
  1179. Reduced compile times.
  1180. </li>
  1181. <li class="listitem">
  1182. Reduced the size of generated code.
  1183. </li>
  1184. <li class="listitem">
  1185. Extended the guarantee that background threads don't call user code to
  1186. all asynchronous operations.
  1187. </li>
  1188. <li class="listitem">
  1189. Changed to use edge-triggered epoll on Linux.
  1190. </li>
  1191. <li class="listitem">
  1192. Changed to use <code class="computeroutput"><span class="identifier">timerfd</span></code>
  1193. for dispatching timers on Linux, when available.
  1194. </li>
  1195. <li class="listitem">
  1196. Changed to use one-shot notifications with kqueue on Mac OS X and BSD platforms.
  1197. </li>
  1198. <li class="listitem">
  1199. 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>
  1200. 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>,
  1201. allowing the compiler to catch cases where users incorrectly pass a numeric
  1202. port number as the service name.
  1203. </li>
  1204. <li class="listitem">
  1205. Added <code class="computeroutput"><span class="preprocessor">#define</span> <span class="identifier">NOMINMAX</span></code>
  1206. 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.
  1207. </li>
  1208. <li class="listitem">
  1209. Fixed a bug where 0-byte asynchronous reads were incorrectly passing an
  1210. <code class="computeroutput"><span class="identifier">error</span><span class="special">::</span><span class="identifier">eof</span></code> result to the completion handler.
  1211. </li>
  1212. <li class="listitem">
  1213. 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
  1214. modifying blocking mode.
  1215. </li>
  1216. <li class="listitem">
  1217. Changed the resolver implementation so that it no longer requires the typedefs
  1218. <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>,
  1219. as neither typedef is part of the documented <code class="computeroutput"><span class="identifier">InternetProtocol</span></code>
  1220. requirements. The corresponding typedefs in the <code class="computeroutput"><span class="identifier">ip</span><span class="special">::</span><span class="identifier">tcp</span></code>,
  1221. <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>
  1222. classes have been deprecated.
  1223. </li>
  1224. <li class="listitem">
  1225. Fixed out-of-band handling for reactors not based on <code class="computeroutput"><span class="identifier">select</span><span class="special">()</span></code>.
  1226. </li>
  1227. <li class="listitem">
  1228. 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>
  1229. macro that allows Asio's threading support to be independently disabled.
  1230. </li>
  1231. <li class="listitem">
  1232. Minor documentation improvements.
  1233. </li>
  1234. </ul></div>
  1235. <h4>
  1236. <a name="asio.history.h17"></a>
  1237. <span><a name="asio.history.asio_1_4_4"></a></span><a class="link" href="history.html#asio.history.asio_1_4_4">Asio
  1238. 1.4.4</a>
  1239. </h4>
  1240. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1241. <li class="listitem">
  1242. Added a new HTTP Server 4 example illustrating the use of stackless coroutines
  1243. with Asio.
  1244. </li>
  1245. <li class="listitem">
  1246. 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>
  1247. to get the address of handler objects, rather than applying <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;</span></code>
  1248. directly.
  1249. </li>
  1250. <li class="listitem">
  1251. Restricted MSVC buffer debugging workaround to 2008, as it causes a crash
  1252. with 2010 beta 2.
  1253. </li>
  1254. <li class="listitem">
  1255. Fixed a problem with the lifetime of handler memory, where Windows needs
  1256. the <code class="computeroutput"><span class="identifier">OVERLAPPED</span></code> structure
  1257. to be valid until both the initiating function call has returned and the
  1258. completion packet has been delivered.
  1259. </li>
  1260. <li class="listitem">
  1261. Don't block signals while performing system calls, but instead restart
  1262. the calls if they are interrupted.
  1263. </li>
  1264. <li class="listitem">
  1265. Documented the guarantee made by strand objects with respect to order of
  1266. handler invocation.
  1267. </li>
  1268. <li class="listitem">
  1269. Changed strands to use a pool of implementations, to make copying of strands
  1270. cheaper.
  1271. </li>
  1272. <li class="listitem">
  1273. Ensured that kqueue support is enabled for BSD platforms.
  1274. </li>
  1275. <li class="listitem">
  1276. Added a <code class="computeroutput"><span class="identifier">boost_</span></code> prefix to
  1277. the <code class="computeroutput"><span class="keyword">extern</span> <span class="string">"C"</span></code>
  1278. thread entry point function.
  1279. </li>
  1280. <li class="listitem">
  1281. In <code class="computeroutput"><span class="identifier">getaddrinfo</span></code> emulation,
  1282. only check the socket type (<code class="computeroutput"><span class="identifier">SOCK_STREAM</span></code>
  1283. or <code class="computeroutput"><span class="identifier">SOCK_DGRAM</span></code>) if a service
  1284. name has been specified. This should allow the emulation to work with raw
  1285. sockets.
  1286. </li>
  1287. <li class="listitem">
  1288. Added a workaround for some broken Windows firewalls that make a socket
  1289. appear bound to 0.0.0.0 when it is in fact bound to 127.0.0.1.
  1290. </li>
  1291. <li class="listitem">
  1292. Applied a fix for reported excessive CPU usage under Solaris.
  1293. </li>
  1294. <li class="listitem">
  1295. Added some support for platforms that use older compilers such as g++ 2.95.
  1296. </li>
  1297. </ul></div>
  1298. <h4>
  1299. <a name="asio.history.h18"></a>
  1300. <span><a name="asio.history.asio_1_4_3"></a></span><a class="link" href="history.html#asio.history.asio_1_4_3">Asio
  1301. 1.4.3</a>
  1302. </h4>
  1303. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1304. <li class="listitem">
  1305. Added a new ping example to illustrate the use of ICMP sockets.
  1306. </li>
  1307. <li class="listitem">
  1308. Changed the <code class="computeroutput"><span class="identifier">buffered</span><span class="special">*</span><span class="identifier">_stream</span><span class="special">&lt;&gt;</span></code>
  1309. templates to treat 0-byte reads and writes as no-ops, to comply with the
  1310. documented type requirements for <code class="computeroutput"><span class="identifier">SyncReadStream</span></code>,
  1311. <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>.
  1312. </li>
  1313. <li class="listitem">
  1314. Changed some instances of the <code class="computeroutput"><span class="keyword">throw</span></code>
  1315. 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>
  1316. to allow Asio to be used when exception support is disabled. Note that
  1317. the SSL wrappers still require exception support.
  1318. </li>
  1319. <li class="listitem">
  1320. Made Asio compatible with the OpenSSL 1.0 beta.
  1321. </li>
  1322. <li class="listitem">
  1323. Eliminated a redundant system call in the Solaris /dev/poll backend.
  1324. </li>
  1325. <li class="listitem">
  1326. Fixed a bug in resizing of the bucket array in the internal hash maps.
  1327. </li>
  1328. <li class="listitem">
  1329. Ensured correct propagation of the error code when a synchronous accept
  1330. fails.
  1331. </li>
  1332. <li class="listitem">
  1333. Ensured correct propagation of the error code when a synchronous read or
  1334. write on a Windows <code class="computeroutput"><span class="identifier">HANDLE</span></code>
  1335. fails.
  1336. </li>
  1337. <li class="listitem">
  1338. Fixed failures reported when <code class="computeroutput"><span class="identifier">_GLIBCXX_DEBUG</span></code>
  1339. is defined.
  1340. </li>
  1341. <li class="listitem">
  1342. Fixed custom memory allocation support for timers.
  1343. </li>
  1344. <li class="listitem">
  1345. Tidied up various warnings reported by g++.
  1346. </li>
  1347. <li class="listitem">
  1348. Various documentation improvements, including more obvious hyperlinks to
  1349. function overloads, header file information, examples for the handler type
  1350. requirements, and adding enum values to the index.
  1351. </li>
  1352. </ul></div>
  1353. <h4>
  1354. <a name="asio.history.h19"></a>
  1355. <span><a name="asio.history.asio_1_4_2"></a></span><a class="link" href="history.html#asio.history.asio_1_4_2">Asio
  1356. 1.4.2</a>
  1357. </h4>
  1358. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1359. <li class="listitem">
  1360. Implement automatic resizing of the bucket array in the internal hash maps.
  1361. This is to improve performance for very large numbers of asynchronous operations
  1362. 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>
  1363. may be used to tweak the sizes used for the bucket arrays. (N.B. this feature
  1364. introduced a bug which was fixed in Asio 1.4.3 / Boost 1.40.)
  1365. </li>
  1366. <li class="listitem">
  1367. Add performance optimisation for the Windows IOCP backend for when no timers
  1368. are used.
  1369. </li>
  1370. <li class="listitem">
  1371. Prevent locale settings from affecting formatting of TCP and UDP endpoints.
  1372. </li>
  1373. <li class="listitem">
  1374. Fix a memory leak that occurred when an asynchronous SSL operation's completion
  1375. handler threw an exception.
  1376. </li>
  1377. <li class="listitem">
  1378. 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
  1379. type requirements for IoControlCommand.
  1380. </li>
  1381. <li class="listitem">
  1382. Fix incompatibility between Asio and ncurses.h.
  1383. </li>
  1384. <li class="listitem">
  1385. 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
  1386. 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
  1387. named pipe.
  1388. </li>
  1389. <li class="listitem">
  1390. Fix system call wrappers to always clear the error on success, as POSIX
  1391. allows successful system calls to modify errno.
  1392. </li>
  1393. <li class="listitem">
  1394. 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.
  1395. </li>
  1396. <li class="listitem">
  1397. Cleaned up some more MSVC level 4 warnings.
  1398. </li>
  1399. <li class="listitem">
  1400. Various documentation fixes.
  1401. </li>
  1402. </ul></div>
  1403. <h4>
  1404. <a name="asio.history.h20"></a>
  1405. <span><a name="asio.history.asio_1_4_1"></a></span><a class="link" href="history.html#asio.history.asio_1_4_1">Asio
  1406. 1.4.1</a>
  1407. </h4>
  1408. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1409. <li class="listitem">
  1410. Improved compatibility with some Windows firewall software.
  1411. </li>
  1412. <li class="listitem">
  1413. 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
  1414. handler.
  1415. </li>
  1416. <li class="listitem">
  1417. Fixed a link problem and multicast failure on QNX.
  1418. </li>
  1419. <li class="listitem">
  1420. Fixed a compile error in SSL support on MinGW / g++ 3.4.5.
  1421. </li>
  1422. <li class="listitem">
  1423. Drop back to using a pipe for notification if eventfd is not available
  1424. at runtime on Linux.
  1425. </li>
  1426. <li class="listitem">
  1427. Various minor bug and documentation fixes.
  1428. </li>
  1429. </ul></div>
  1430. <h4>
  1431. <a name="asio.history.h21"></a>
  1432. <span><a name="asio.history.asio_1_4_0"></a></span><a class="link" href="history.html#asio.history.asio_1_4_0">Asio
  1433. 1.4.0</a>
  1434. </h4>
  1435. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1436. <li class="listitem">
  1437. Enhanced CompletionCondition concept with the signature <code class="computeroutput"><span class="identifier">size_t</span>
  1438. <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>,
  1439. where the return value indicates the maximum number of bytes to be transferred
  1440. on the next read or write operation. (The old CompletionCondition signature
  1441. is still supported for backwards compatibility).
  1442. </li>
  1443. <li class="listitem">
  1444. New <code class="computeroutput"><span class="identifier">windows</span><span class="special">::</span><span class="identifier">overlapped_ptr</span></code> class to allow arbitrary
  1445. overlapped I/O functions (such as <code class="computeroutput"><span class="identifier">TransmitFile</span></code>)
  1446. to be used with Asio.
  1447. </li>
  1448. <li class="listitem">
  1449. On recent versions of Linux, an <code class="computeroutput"><span class="identifier">eventfd</span></code>
  1450. descriptor is now used (rather than a pipe) to interrupt a blocked select/epoll
  1451. reactor.
  1452. </li>
  1453. <li class="listitem">
  1454. Added const overloads of <code class="computeroutput"><span class="identifier">lowest_layer</span><span class="special">()</span></code>.
  1455. </li>
  1456. <li class="listitem">
  1457. Synchronous read, write, accept and connect operations are now thread safe
  1458. (meaning that it is now permitted to perform concurrent synchronous operations
  1459. on an individual socket, if supported by the OS).
  1460. </li>
  1461. <li class="listitem">
  1462. Reactor-based <code class="computeroutput"><span class="identifier">io_service</span></code>
  1463. implementations now use lazy initialisation to reduce the memory usage
  1464. of an <code class="computeroutput"><span class="identifier">io_service</span></code> object
  1465. used only as a message queue.
  1466. </li>
  1467. </ul></div>
  1468. <h4>
  1469. <a name="asio.history.h22"></a>
  1470. <span><a name="asio.history.asio_1_2_0"></a></span><a class="link" href="history.html#asio.history.asio_1_2_0">Asio
  1471. 1.2.0</a>
  1472. </h4>
  1473. <div class="itemizedlist"><ul class="itemizedlist" type="disc">
  1474. <li class="listitem">
  1475. Added support for serial ports.
  1476. </li>
  1477. <li class="listitem">
  1478. Added support for UNIX domain sockets.
  1479. </li>
  1480. <li class="listitem">
  1481. Added support for raw sockets and ICMP.
  1482. </li>
  1483. <li class="listitem">
  1484. Added wrappers for POSIX stream-oriented file descriptors (excluding regular
  1485. files).
  1486. </li>
  1487. <li class="listitem">
  1488. Added wrappers for Windows stream-oriented <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
  1489. such as named pipes (requires <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
  1490. that work with I/O completion ports).
  1491. </li>
  1492. <li class="listitem">
  1493. Added wrappers for Windows random-access <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
  1494. such as files (requires <code class="computeroutput"><span class="identifier">HANDLE</span></code>s
  1495. that work with I/O completion ports).
  1496. </li>
  1497. <li class="listitem">
  1498. Added support for reactor-style operations (i.e. they report readiness
  1499. but perform no I/O) using a new <code class="computeroutput"><span class="identifier">null_buffers</span></code>
  1500. type.
  1501. </li>
  1502. <li class="listitem">
  1503. Added an iterator type for bytewise traversal of buffer sequences.
  1504. </li>
  1505. <li class="listitem">
  1506. Added new <code class="computeroutput"><span class="identifier">read_until</span><span class="special">()</span></code>
  1507. and <code class="computeroutput"><span class="identifier">async_read_until</span><span class="special">()</span></code>
  1508. overloads that take a user-defined function object for locating message
  1509. boundaries.
  1510. </li>
  1511. <li class="listitem">
  1512. 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>)
  1513. that may provide better <code class="computeroutput"><span class="identifier">io_service</span></code>
  1514. scalability across many processors.
  1515. </li>
  1516. <li class="listitem">
  1517. Various fixes, performance improvements, and more complete coverage of
  1518. the custom memory allocation support.
  1519. </li>
  1520. </ul></div>
  1521. <h4>
  1522. <a name="asio.history.h23"></a>
  1523. <span><a name="asio.history.asio_1_0_0"></a></span><a class="link" href="history.html#asio.history.asio_1_0_0">Asio
  1524. 1.0.0</a>
  1525. </h4>
  1526. <p>
  1527. First stable release of Asio.
  1528. </p>
  1529. </div>
  1530. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  1531. <td align="left"></td>
  1532. <td align="right"><div class="copyright-footer">Copyright &#169; 2003-2014 Christopher M. Kohlhoff<p>
  1533. Distributed under the Boost Software License, Version 1.0. (See accompanying
  1534. 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>)
  1535. </p>
  1536. </div></td>
  1537. </tr></table>
  1538. <hr>
  1539. <div class="spirit-nav">
  1540. <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>
  1541. </div>
  1542. </body>
  1543. </html>