1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Platform-Specific Implementation Notes</title> 5<link rel="stylesheet" href="../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../boost_asio.html" title="Boost.Asio"> 8<link rel="up" href="../overview.html" title="Overview"> 9<link rel="prev" href="cpp2011/futures.html" title="Futures"> 10<link rel="next" href="../using.html" title="Using Boost.Asio"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../boost.png"></td> 15<td align="center"><a href="../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="cpp2011/futures.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../boost_asio.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../using.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h3 class="title"> 27<a name="boost_asio.overview.implementation"></a><a class="link" href="implementation.html" title="Platform-Specific Implementation Notes">Platform-Specific 28 Implementation Notes</a> 29</h3></div></div></div> 30<p> 31 This section lists platform-specific implementation details, such as the 32 default demultiplexing mechanism, the number of threads created internally, 33 and when threads are created. 34 </p> 35<h5> 36<a name="boost_asio.overview.implementation.h0"></a> 37 <span class="phrase"><a name="boost_asio.overview.implementation.linux_kernel_2_4"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.linux_kernel_2_4">Linux 38 Kernel 2.4</a> 39 </h5> 40<p> 41 Demultiplexing mechanism: 42 </p> 43<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 44 Uses <code class="computeroutput">select</code> for demultiplexing. This means that the number 45 of file descriptors in the process cannot be permitted to exceed <code class="computeroutput">FD_SETSIZE</code>. 46 </li></ul></div> 47<p> 48 Threads: 49 </p> 50<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 51<li class="listitem"> 52 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 53 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 54 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 55 </li> 56<li class="listitem"> 57 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 58 host resolution. This thread is created on the first call to either 59 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 60 </li> 61</ul></div> 62<p> 63 Scatter-Gather: 64 </p> 65<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 66 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 67 single operation. 68 </li></ul></div> 69<h5> 70<a name="boost_asio.overview.implementation.h1"></a> 71 <span class="phrase"><a name="boost_asio.overview.implementation.linux_kernel_2_6"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.linux_kernel_2_6">Linux 72 Kernel 2.6</a> 73 </h5> 74<p> 75 Demultiplexing mechanism: 76 </p> 77<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 78 Uses <code class="computeroutput">epoll</code> for demultiplexing. 79 </li></ul></div> 80<p> 81 Threads: 82 </p> 83<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 84<li class="listitem"> 85 Demultiplexing using <code class="computeroutput">epoll</code> is performed in one of the threads 86 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 87 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 88 </li> 89<li class="listitem"> 90 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 91 host resolution. This thread is created on the first call to either 92 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 93 </li> 94</ul></div> 95<p> 96 Scatter-Gather: 97 </p> 98<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 99 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 100 single operation. 101 </li></ul></div> 102<h5> 103<a name="boost_asio.overview.implementation.h2"></a> 104 <span class="phrase"><a name="boost_asio.overview.implementation.solaris"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.solaris">Solaris</a> 105 </h5> 106<p> 107 Demultiplexing mechanism: 108 </p> 109<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 110 Uses <code class="literal">/dev/poll</code> for demultiplexing. 111 </li></ul></div> 112<p> 113 Threads: 114 </p> 115<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 116<li class="listitem"> 117 Demultiplexing using <code class="literal">/dev/poll</code> is performed in one 118 of the threads that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 119 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 120 </li> 121<li class="listitem"> 122 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 123 host resolution. This thread is created on the first call to either 124 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 125 </li> 126</ul></div> 127<p> 128 Scatter-Gather: 129 </p> 130<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 131 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 132 single operation. 133 </li></ul></div> 134<h5> 135<a name="boost_asio.overview.implementation.h3"></a> 136 <span class="phrase"><a name="boost_asio.overview.implementation.qnx_neutrino"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.qnx_neutrino">QNX 137 Neutrino</a> 138 </h5> 139<p> 140 Demultiplexing mechanism: 141 </p> 142<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 143 Uses <code class="computeroutput">select</code> for demultiplexing. This means that the number 144 of file descriptors in the process cannot be permitted to exceed <code class="computeroutput">FD_SETSIZE</code>. 145 </li></ul></div> 146<p> 147 Threads: 148 </p> 149<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 150<li class="listitem"> 151 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 152 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 153 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 154 </li> 155<li class="listitem"> 156 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 157 host resolution. This thread is created on the first call to either 158 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 159 </li> 160</ul></div> 161<p> 162 Scatter-Gather: 163 </p> 164<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 165 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 166 single operation. 167 </li></ul></div> 168<h5> 169<a name="boost_asio.overview.implementation.h4"></a> 170 <span class="phrase"><a name="boost_asio.overview.implementation.mac_os_x"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.mac_os_x">Mac 171 OS X</a> 172 </h5> 173<p> 174 Demultiplexing mechanism: 175 </p> 176<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 177 Uses <code class="computeroutput">kqueue</code> for demultiplexing. 178 </li></ul></div> 179<p> 180 Threads: 181 </p> 182<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 183<li class="listitem"> 184 Demultiplexing using <code class="computeroutput">kqueue</code> is performed in one of the threads 185 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 186 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 187 </li> 188<li class="listitem"> 189 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 190 host resolution. This thread is created on the first call to either 191 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 192 </li> 193</ul></div> 194<p> 195 Scatter-Gather: 196 </p> 197<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 198 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 199 single operation. 200 </li></ul></div> 201<h5> 202<a name="boost_asio.overview.implementation.h5"></a> 203 <span class="phrase"><a name="boost_asio.overview.implementation.freebsd"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.freebsd">FreeBSD</a> 204 </h5> 205<p> 206 Demultiplexing mechanism: 207 </p> 208<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 209 Uses <code class="computeroutput">kqueue</code> for demultiplexing. 210 </li></ul></div> 211<p> 212 Threads: 213 </p> 214<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 215<li class="listitem"> 216 Demultiplexing using <code class="computeroutput">kqueue</code> is performed in one of the threads 217 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 218 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 219 </li> 220<li class="listitem"> 221 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 222 host resolution. This thread is created on the first call to either 223 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 224 </li> 225</ul></div> 226<p> 227 Scatter-Gather: 228 </p> 229<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 230 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 231 single operation. 232 </li></ul></div> 233<h5> 234<a name="boost_asio.overview.implementation.h6"></a> 235 <span class="phrase"><a name="boost_asio.overview.implementation.aix"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.aix">AIX</a> 236 </h5> 237<p> 238 Demultiplexing mechanism: 239 </p> 240<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 241 Uses <code class="computeroutput">select</code> for demultiplexing. This means that the number 242 of file descriptors in the process cannot be permitted to exceed <code class="computeroutput">FD_SETSIZE</code>. 243 </li></ul></div> 244<p> 245 Threads: 246 </p> 247<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 248<li class="listitem"> 249 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 250 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 251 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 252 </li> 253<li class="listitem"> 254 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 255 host resolution. This thread is created on the first call to either 256 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 257 </li> 258</ul></div> 259<p> 260 Scatter-Gather: 261 </p> 262<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 263 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 264 single operation. 265 </li></ul></div> 266<h5> 267<a name="boost_asio.overview.implementation.h7"></a> 268 <span class="phrase"><a name="boost_asio.overview.implementation.hp_ux"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.hp_ux">HP-UX</a> 269 </h5> 270<p> 271 Demultiplexing mechanism: 272 </p> 273<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 274 Uses <code class="computeroutput">select</code> for demultiplexing. This means that the number 275 of file descriptors in the process cannot be permitted to exceed <code class="computeroutput">FD_SETSIZE</code>. 276 </li></ul></div> 277<p> 278 Threads: 279 </p> 280<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 281<li class="listitem"> 282 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 283 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 284 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 285 </li> 286<li class="listitem"> 287 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 288 host resolution. This thread is created on the first call to either 289 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 290 </li> 291</ul></div> 292<p> 293 Scatter-Gather: 294 </p> 295<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 296 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 297 single operation. 298 </li></ul></div> 299<h5> 300<a name="boost_asio.overview.implementation.h8"></a> 301 <span class="phrase"><a name="boost_asio.overview.implementation.tru64"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.tru64">Tru64</a> 302 </h5> 303<p> 304 Demultiplexing mechanism: 305 </p> 306<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 307 Uses <code class="computeroutput">select</code> for demultiplexing. This means that the number 308 of file descriptors in the process cannot be permitted to exceed <code class="computeroutput">FD_SETSIZE</code>. 309 </li></ul></div> 310<p> 311 Threads: 312 </p> 313<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 314<li class="listitem"> 315 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 316 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 317 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 318 </li> 319<li class="listitem"> 320 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 321 host resolution. This thread is created on the first call to either 322 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 323 </li> 324</ul></div> 325<p> 326 Scatter-Gather: 327 </p> 328<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 329 At most <code class="computeroutput">min(64,IOV_MAX)</code> buffers may be transferred in a 330 single operation. 331 </li></ul></div> 332<h5> 333<a name="boost_asio.overview.implementation.h9"></a> 334 <span class="phrase"><a name="boost_asio.overview.implementation.windows_95__98_and_me"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.windows_95__98_and_me">Windows 335 95, 98 and Me</a> 336 </h5> 337<p> 338 Demultiplexing mechanism: 339 </p> 340<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 341 Uses <code class="computeroutput">select</code> for demultiplexing. 342 </li></ul></div> 343<p> 344 Threads: 345 </p> 346<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 347<li class="listitem"> 348 Demultiplexing using <code class="computeroutput">select</code> is performed in one of the threads 349 that calls <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 350 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 351 </li> 352<li class="listitem"> 353 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 354 host resolution. This thread is created on the first call to either 355 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 356 </li> 357</ul></div> 358<p> 359 Scatter-Gather: 360 </p> 361<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 362 For sockets, at most 16 buffers may be transferred in a single operation. 363 </li></ul></div> 364<h5> 365<a name="boost_asio.overview.implementation.h10"></a> 366 <span class="phrase"><a name="boost_asio.overview.implementation.windows_nt__2000__xp__2003__vista__7_and_8"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.windows_nt__2000__xp__2003__vista__7_and_8">Windows 367 NT, 2000, XP, 2003, Vista, 7 and 8</a> 368 </h5> 369<p> 370 Demultiplexing mechanism: 371 </p> 372<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 373<li class="listitem"> 374 Uses overlapped I/O and I/O completion ports for all asynchronous socket 375 operations except for asynchronous connect. 376 </li> 377<li class="listitem"> 378 Uses <code class="computeroutput">select</code> for emulating asynchronous connect. 379 </li> 380</ul></div> 381<p> 382 Threads: 383 </p> 384<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 385<li class="listitem"> 386 Demultiplexing using I/O completion ports is performed in all threads 387 that call <code class="computeroutput">io_context::run()</code>, <code class="computeroutput">io_context::run_one()</code>, 388 <code class="computeroutput">io_context::poll()</code> or <code class="computeroutput">io_context::poll_one()</code>. 389 </li> 390<li class="listitem"> 391 An additional thread per <code class="computeroutput">io_context</code> is used to trigger timers. 392 This thread is created on construction of the first <code class="computeroutput">basic_deadline_timer</code> 393 or <code class="computeroutput">basic_waitable_timer</code> objects. 394 </li> 395<li class="listitem"> 396 An additional thread per <code class="computeroutput">io_context</code> is used for the <code class="computeroutput">select</code> 397 demultiplexing. This thread is created on the first call to <code class="computeroutput">async_connect()</code>. 398 </li> 399<li class="listitem"> 400 An additional thread per <code class="computeroutput">io_context</code> is used to emulate asynchronous 401 host resolution. This thread is created on the first call to either 402 <code class="computeroutput">ip::tcp::resolver::async_resolve()</code> or <code class="computeroutput">ip::udp::resolver::async_resolve()</code>. 403 </li> 404</ul></div> 405<p> 406 Scatter-Gather: 407 </p> 408<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 409<li class="listitem"> 410 For sockets, at most 64 buffers may be transferred in a single operation. 411 </li> 412<li class="listitem"> 413 For stream-oriented handles, only one buffer may be transferred in a 414 single operation. 415 </li> 416</ul></div> 417<h5> 418<a name="boost_asio.overview.implementation.h11"></a> 419 <span class="phrase"><a name="boost_asio.overview.implementation.windows_runtime"></a></span><a class="link" href="implementation.html#boost_asio.overview.implementation.windows_runtime">Windows 420 Runtime</a> 421 </h5> 422<p> 423 Boost.Asio provides limited support for the Windows Runtime. It requires 424 that the language extensions be enabled. Due to the restricted facilities 425 exposed by the Windows Runtime API, the support comes with the following 426 caveats: 427 </p> 428<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 429<li class="listitem"> 430 The core facilities such as the <code class="computeroutput">io_context</code>, <code class="computeroutput">strand</code>, 431 buffers, composed operations, timers, etc., should all work as normal. 432 </li> 433<li class="listitem"> 434 For sockets, only client-side TCP is supported. 435 </li> 436<li class="listitem"> 437 Explicit binding of a client-side TCP socket is not supported. 438 </li> 439<li class="listitem"> 440 The <code class="computeroutput">cancel()</code> function is not supported for sockets. Asynchronous 441 operations may only be cancelled by closing the socket. 442 </li> 443<li class="listitem"> 444 Operations that use <code class="computeroutput">null_buffers</code> are not supported. 445 </li> 446<li class="listitem"> 447 Only <code class="computeroutput">tcp::no_delay</code> and <code class="computeroutput">socket_base::keep_alive</code> 448 options are supported. 449 </li> 450<li class="listitem"> 451 Resolvers do not support service names, only numbers. I.e. you must use 452 "80" rather than "http". 453 </li> 454<li class="listitem"> 455 Most resolver query flags have no effect. 456 </li> 457</ul></div> 458<p> 459 Demultiplexing mechanism: 460 </p> 461<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 462 Uses the <code class="computeroutput">Windows::Networking::Sockets::StreamSocket</code> class 463 to implement asynchronous TCP socket operations. 464 </li></ul></div> 465<p> 466 Threads: 467 </p> 468<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 469<li class="listitem"> 470 Event completions are delivered to the Windows thread pool and posted 471 to the <code class="computeroutput">io_context</code> for the handler to be executed. 472 </li> 473<li class="listitem"> 474 An additional thread per <code class="computeroutput">io_context</code> is used to trigger timers. 475 This thread is created on construction of the first timer objects. 476 </li> 477</ul></div> 478<p> 479 Scatter-Gather: 480 </p> 481<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 482 For sockets, at most one buffer may be transferred in a single operation. 483 </li></ul></div> 484</div> 485<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 486<td align="left"></td> 487<td align="right"><div class="copyright-footer">Copyright © 2003-2020 Christopher M. 488 Kohlhoff<p> 489 Distributed under the Boost Software License, Version 1.0. (See accompanying 490 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>) 491 </p> 492</div></td> 493</tr></table> 494<hr> 495<div class="spirit-nav"> 496<a accesskey="p" href="cpp2011/futures.html"><img src="../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../overview.html"><img src="../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../boost_asio.html"><img src="../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../using.html"><img src="../../../../doc/src/images/next.png" alt="Next"></a> 497</div> 498</body> 499</html> 500