implementation.html 39 KB

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