[/ / Copyright (c) 2003-2008 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]