| [/ |
| / Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
| / |
| / Distributed under the Boost Software License, Version 1.0. (See accompanying |
| / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| /] |
| |
| [section:implementation Platform-Specific Implementation Notes] |
| |
| This section lists platform-specific implementation details, such as the |
| default demultiplexing mechanism, the number of threads created internally, and |
| when threads are created. |
| |
| |
| [heading Linux Kernel 2.4] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. This means that the number of file |
| descriptors in the process cannot be permitted to exceed `FD_SETSIZE`. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| [heading Linux Kernel 2.6] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `epoll` for demultiplexing. |
| |
| Threads: |
| |
| * Demultiplexing using `epoll` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading Solaris] |
| |
| Demultiplexing mechanism: |
| |
| * Uses [^/dev/poll] for demultiplexing. |
| |
| Threads: |
| |
| * Demultiplexing using [^/dev/poll] is performed in one of the threads that |
| calls `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading QNX Neutrino] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. This means that the number of file |
| descriptors in the process cannot be permitted to exceed `FD_SETSIZE`. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading Mac OS X] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `kqueue` for demultiplexing. |
| |
| Threads: |
| |
| * Demultiplexing using `kqueue` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading FreeBSD] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `kqueue` for demultiplexing. |
| |
| Threads: |
| |
| * Demultiplexing using `kqueue` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading AIX] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. This means that the number of file |
| descriptors in the process cannot be permitted to exceed `FD_SETSIZE`. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading HP-UX] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. This means that the number of file |
| descriptors in the process cannot be permitted to exceed `FD_SETSIZE`. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading Tru64] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. This means that the number of file |
| descriptors in the process cannot be permitted to exceed `FD_SETSIZE`. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * At most `min(64,IOV_MAX)` buffers may be transferred in a single operation. |
| |
| |
| [heading Windows 95, 98 and Me] |
| |
| Demultiplexing mechanism: |
| |
| * Uses `select` for demultiplexing. |
| |
| Threads: |
| |
| * Demultiplexing using `select` is performed in one of the threads that calls |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * For sockets, at most 16 buffers may be transferred in a single operation. |
| |
| |
| [heading Windows NT, 2000, XP, 2003 and Vista] |
| |
| Demultiplexing mechanism: |
| |
| * Uses overlapped I/O and I/O completion ports for all asynchronous socket |
| operations except for asynchronous connect. |
| |
| * Uses `select` for emulating asynchronous connect. |
| |
| Threads: |
| |
| * Demultiplexing using I/O completion ports is performed in all threads that call |
| `io_service::run()`, `io_service::run_one()`, `io_service::poll()` or |
| `io_service::poll_one()`. |
| |
| * An additional thread per `io_service` is used for the `select` |
| demultiplexing. This thread is created on the first call to `async_connect()`. |
| |
| * An additional thread per `io_service` is used to emulate asynchronous host |
| resolution. This thread is created on the first call to either |
| `ip::tcp::resolver::async_resolve()` or `ip::udp::resolver::async_resolve()`. |
| |
| Scatter-Gather: |
| |
| * For sockets, at most 64 buffers may be transferred in a single operation. |
| |
| * For stream-oriented handles, only one buffer may be transferred in a single |
| operation. |
| |
| |
| [endsect] |