This section lists platform-specific implementation details, such as the default demultiplexing mechanism, the number of threads created internally, and when threads are created.
Demultiplexing mechanism:
select
for demultiplexing.
This means that the number of file descriptors in the process cannot
be permitted to exceed FD_SETSIZE
.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
epoll
for demultiplexing.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
/dev/poll
for demultiplexing.
Threads:
/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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
select
for demultiplexing.
This means that the number of file descriptors in the process cannot
be permitted to exceed FD_SETSIZE
.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
kqueue
for demultiplexing.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
kqueue
for demultiplexing.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
select
for demultiplexing.
This means that the number of file descriptors in the process cannot
be permitted to exceed FD_SETSIZE
.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
select
for demultiplexing.
This means that the number of file descriptors in the process cannot
be permitted to exceed FD_SETSIZE
.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
select
for demultiplexing.
This means that the number of file descriptors in the process cannot
be permitted to exceed FD_SETSIZE
.
Threads:
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()
.
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:
min(64,IOV_MAX)
buffers may be transferred in a single
operation.
Demultiplexing mechanism:
select
for demultiplexing.
Threads:
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()
.
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:
Demultiplexing mechanism:
select
for emulating
asynchronous connect.
Threads:
io_service::run()
, io_service::run_one()
, io_service::poll()
or io_service::poll_one()
.
io_service
is used to trigger timers. This thread is created on construction of
the first deadline_timer
or deadline_timer_service
objects.
io_service
is used for the select
demultiplexing. This thread is created on the first call to async_connect()
.
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:
Asio provides limited support for the Windows Runtime. It requires that the language extensions be enabled. Due to the restricted facilities exposed by the Windows Runtime API, the support comes with the following caveats:
io_service
,
strand
, buffers, composed
operations, timers, etc., should all work as normal.
cancel()
function is not supported for sockets. Asynchronous operations may only
be cancelled by closing the socket.
null_buffers
are not supported.
tcp::no_delay
and socket_base::keep_alive
options are supported.
Demultiplexing mechanism:
Windows::Networking::Sockets::StreamSocket
class to implement asynchronous
TCP socket operations.
Threads:
io_service
for
the handler to be executed.
io_service
is used to trigger timers. This thread is created on construction of
the first timer objects.
Scatter-Gather: