Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. — Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Platform-Specific Implementation Notes
PrevUpHomeNext

This section lists platform-specific implementation details, such as the default demultiplexing mechanism, the number of threads created internally, and when threads are created.

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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 to trigger timers. This thread is created on construction of the first deadline_timer or deadline_timer_service objects.
  • 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.

PrevUpHomeNext