| [/ |
| / Copyright (c) 2003-2021 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:net_ts Networking TS compatibility] |
| |
| Asio now provides the interfaces and functionality specified by the "C++ |
| Extensions for Networking" Technical Specification. In addition to access via |
| the usual Asio header files, this functionality may be accessed through special |
| headers that correspond to the header files defined in the TS. These are listed |
| in the table below: |
| |
| [table |
| [[Networking TS header][Asio header]] |
| [[`#include <buffer>`][`#include <asio/ts/buffer.hpp>`]] |
| [[`#include <executor>`][`#include <asio/ts/executor.hpp>`]] |
| [[`#include <internet>`][`#include <asio/ts/internet.hpp>`]] |
| [[`#include <io_context>`][`#include <asio/ts/io_context.hpp>`]] |
| [[`#include <net>`][`#include <asio/ts/net.hpp>`]] |
| [[`#include <netfwd>`][`#include <asio/ts/netfwd.hpp>`]] |
| [[`#include <socket>`][`#include <asio/ts/socket.hpp>`]] |
| [[`#include <timer>`][`#include <asio/ts/timer.hpp>`]] |
| ] |
| |
| In some cases the new Networking TS compatible interfaces supersede older Asio |
| facilities. In these cases the older interfaces have been deprecated. The table |
| below shows the new Networking TS interfaces and the facilities they replace: |
| |
| [table |
| [[New interface][Old interface][Notes]] |
| [ |
| [[link asio.reference.io_context `io_context`]] |
| [[link asio.reference.io_service `io_service`]] |
| [The name `io_service` is retained as a typedef.] |
| ] |
| [ |
| [[link asio.reference.dispatch `dispatch`]] |
| [[link asio.reference.io_context.dispatch `io_service::dispatch`]] |
| [The `dispatch` free function can be used to submit functions to any [link |
| asio.reference.Executor1 Executor] or [link asio.reference.ExecutionContext |
| ExecutionContext].] |
| ] |
| [ |
| [[link asio.reference.post `post`]] |
| [[link asio.reference.io_context.post `io_service::post`]] |
| [The `post` free function can be used to submit functions to any [link |
| asio.reference.Executor1 Executor] or [link asio.reference.ExecutionContext |
| ExecutionContext].] |
| ] |
| [ |
| [[link asio.reference.defer `defer`]] |
| [[link asio.reference.io_context.post `io_service::post`] when the [link |
| asio.reference.asio_handler_is_continuation `asio_handler_is_continuation`] |
| hook returns true] |
| [The `defer` free function can be used to submit functions to any [link |
| asio.reference.Executor1 Executor] or [link asio.reference.ExecutionContext |
| ExecutionContext].] |
| ] |
| [ |
| [[link asio.reference.io_context.poll `io_context::poll`]] |
| [[link asio.reference.io_context.poll `io_service::poll`] overload that |
| takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.io_context.poll_one `io_context::poll_one`]] |
| [[link asio.reference.io_context.poll_one `io_service::poll_one`] overload |
| that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.io_context.run `io_context::run`]] |
| [[link asio.reference.io_context.run `io_service::run`] overload that takes |
| `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.io_context.run_one `io_context::run_one`]] |
| [[link asio.reference.io_context.run_one `io_service::run_one`] overload |
| that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.io_context.run_for `io_context::run_for`], |
| [link asio.reference.io_context.run_until `io_context::run_until`], |
| [link asio.reference.io_context.run_one_for `io_context::run_one_for`], and |
| [link asio.reference.io_context.run_one_until `io_context::run_one_until`]] |
| [] |
| [These functions add the ability to run an `io_context` for a limited time.] |
| ] |
| [ |
| [[link asio.reference.io_context.restart `io_context::restart`]] |
| [[link asio.reference.io_context.reset `io_service::reset`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.io_context.io_context `io_context`] constructor |
| `concurrency_hint` parameter is type `int`] |
| [[link asio.reference.io_context.io_context `io_context`] constructor |
| `concurrency_hint` parameter is type `std::size_t`] |
| [The old constructor has not been retained as a deprecated overload.] |
| ] |
| [ |
| [[link asio.reference.execution_context `execution_context`], [link |
| asio.reference.execution_context__service `execution_context::service`], |
| and [link asio.reference.execution_context__id `execution_context::id`]] |
| [[link asio.reference.io_context `io_service`], [link |
| asio.reference.io_context__service `io_service::service`], and [link |
| asio.reference.execution_context__id `io_service::id`]] |
| [The service-related functionality has been moved to the |
| `execution_context` base class. This may also be used as a base for |
| creating custom execution contexts.] |
| ] |
| [ |
| [[link asio.reference.execution_context.make_service `make_service`]] |
| [[link asio.reference.execution_context.add_service `add_service`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.strand `strand`]] |
| [[link asio.reference.io_context__strand `io_service::strand`]] |
| [This template works with any valid executor, and is itself a valid |
| executor.] |
| ] |
| [ |
| [[link asio.reference.executor_work_guard `executor_work_guard`] and [link |
| asio.reference.make_work_guard `make_work_guard`]] |
| [[link asio.reference.io_context__work `io_service::work`]] |
| [Work tracking is now covered by the [link asio.reference.Executor1 |
| Executor] requirements. These templates work with any valid executor.] |
| ] |
| [ |
| [[link asio.reference.executor_binder `executor_binder`] and [link |
| asio.reference.bind_executor `bind_executor`]] |
| [[link asio.reference.io_context.wrap `io_service::wrap`] and |
| [link asio.reference.io_context__strand.wrap `io_service::strand::wrap`]] |
| [These templates work with any valid executor.] |
| ] |
| [ |
| [[link asio.reference.async_result `async_result`] with `CompletionToken` |
| and `Signature` template parameters] |
| [`handler_type` and single parameter `async_result`] |
| [The `async_result` trait is now the single point of customisation for |
| asynchronous operation completion handlers and return type.] |
| ] |
| [ |
| [[link asio.reference.associated_executor `associated_executor`] and [link |
| asio.reference.get_associated_executor `get_associated_executor`]] |
| [[link asio.reference.asio_handler_invoke `asio_handler_invoke`]] |
| [The handler invocation hook has been replaced by the new [link |
| asio.reference.Executor1 Executor] requirements and the associated executor |
| traits.] |
| ] |
| [ |
| [[link asio.reference.associated_allocator `associated_allocator`] and |
| [link asio.reference.get_associated_allocator `get_associated_allocator`]] |
| [[link asio.reference.asio_handler_allocate `asio_handler_allocate`] and |
| [link asio.reference.asio_handler_deallocate `asio_handler_deallocate`]] |
| [The handler allocation hooks have been replaced by the standard Allocator |
| requirements and the associated allocator traits.] |
| ] |
| [ |
| [[link asio.reference.const_buffer.data `const_buffer::data`] and [link |
| asio.reference.mutable_buffer.data `mutable_buffer::data`]] |
| [[link asio.reference.buffer_cast `buffer_cast`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.const_buffer.size `const_buffer::size`] and [link |
| asio.reference.mutable_buffer.size `mutable_buffer::size`]] |
| [[link asio.reference.buffer_size `buffer_size`] for single buffers] |
| [`buffer_size` is not deprecated for single buffers as `const_buffer` and |
| `mutable_buffer` now satisfy the buffer sequence requirements] |
| ] |
| [ |
| [[link asio.reference.const_buffer `const_buffer`]] |
| [[link asio.reference.const_buffers_1 `const_buffers_1`]] |
| [The [link asio.reference.ConstBufferSequence ConstBufferSequence] |
| requirements have been modified such that `const_buffer` now satisfies |
| them.] |
| ] |
| [ |
| [[link asio.reference.mutable_buffer `mutable_buffer`]] |
| [[link asio.reference.mutable_buffers_1 `mutable_buffers_1`]] |
| [The [link asio.reference.MutableBufferSequence MutableBufferSequence] |
| requirements have been modified such that `mutable_buffer` now satisfies |
| them.] |
| ] |
| [ |
| [[link asio.reference.basic_socket.get_executor |
| `basic_socket::get_executor`] (and corresponding member for I/O objects |
| such as timers, serial ports, etc.)] |
| [[link asio.reference.basic_io_object.get_io_service |
| `basic_io_object::get_io_service`]] |
| [Use `get_executor().context()` to obtain the associated `io_context`.] |
| ] |
| [ |
| [[link asio.reference.socket_base.max_listen_connections |
| `socket_base::max_listen_connections`]] |
| [[link asio.reference.socket_base.max_connections |
| `socket_base::max_connections`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.socket_base.wait_type `socket_base::wait_type`], |
| [link asio.reference.basic_socket.wait `basic_socket::wait`], [link |
| asio.reference.basic_socket.async_wait `basic_socket::async_wait`], [link |
| asio.reference.basic_socket_acceptor.wait `basic_socket_acceptor::wait`], |
| and [link asio.reference.basic_socket_acceptor.async_wait |
| `basic_socket_acceptor::async_wait`]] |
| [[link asio.reference.null_buffers `null_buffers`]] |
| [Operations for reactive I/O.] |
| ] |
| [ |
| [[link asio.reference.basic_socket_acceptor.accept |
| `basic_socket_acceptor::accept`] returns a socket] |
| [[link asio.reference.basic_socket_acceptor.accept |
| `basic_socket_acceptor::accept`] takes a socket by reference] |
| [Uses move support so requires C++11 or later. To accept a connection into |
| a socket object on a different `io_context`, pass the destination context |
| to `accept`.] |
| ] |
| [ |
| [[link asio.reference.basic_socket_acceptor.async_accept |
| `basic_socket_acceptor::async_accept`] passes socket to handler] |
| [[link asio.reference.basic_socket_acceptor.async_accept |
| `basic_socket_acceptor::async_accept`] takes a socket by reference] |
| [Uses move support so requires C++11 or later. To accept a connection into |
| a socket object on a different `io_context`, pass the destination context |
| to `async_accept`.] |
| ] |
| [ |
| [[link asio.reference.connect `connect`] overloads that take a range] |
| [[link asio.reference.connect `connect`] overloads that take a single |
| iterator] |
| [The [link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] function now returns a range. When the |
| `resolve` function's result is passed directly to `connect`, the range |
| overload will be selected.] |
| ] |
| [ |
| [[link asio.reference.async_connect `async_connect`] overloads that take a |
| range] |
| [[link asio.reference.async_connect `async_connect`] overloads that take a |
| single iterator] |
| [The [link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] function now returns a range. When the |
| `resolve` function's result is passed directly to `async_connect`, the |
| range overload will be selected.] |
| ] |
| [ |
| [[link asio.reference.basic_socket_streambuf.duration |
| `basic_socket_streambuf::duration`]] |
| [[link asio.reference.basic_socket_streambuf.duration_type |
| `basic_socket_streambuf::duration_type`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_streambuf.time_point |
| `basic_socket_streambuf::time_point`]] |
| [[link asio.reference.basic_socket_streambuf.time_type |
| `basic_socket_streambuf::time_type`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_streambuf.expiry |
| `basic_socket_streambuf::expiry`]] |
| [[link asio.reference.basic_socket_streambuf.expires_at |
| `basic_socket_streambuf::expires_at`] and [link |
| asio.reference.basic_socket_streambuf.expires_from_now |
| `basic_socket_streambuf::expires_from_now`] getters] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_streambuf.expires_after |
| `basic_socket_streambuf::expires_after`]] |
| [[link asio.reference.basic_socket_streambuf.expires_from_now |
| `basic_socket_streambuf::expires_from_now`] setter] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_streambuf.error |
| `basic_socket_streambuf::error`]] |
| [[link asio.reference.basic_socket_streambuf.puberror |
| `basic_socket_streambuf::puberror`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_iostream.duration |
| `basic_socket_iostream::duration`]] |
| [[link asio.reference.basic_socket_iostream.duration_type |
| `basic_socket_iostream::duration_type`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_iostream.time_point |
| `basic_socket_iostream::time_point`]] |
| [[link asio.reference.basic_socket_iostream.time_type |
| `basic_socket_iostream::time_type`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_iostream.expiry |
| `basic_socket_iostream::expiry`]] |
| [[link asio.reference.basic_socket_iostream.expires_at |
| `basic_socket_iostream::expires_at`] and [link |
| asio.reference.basic_socket_iostream.expires_from_now |
| `basic_socket_iostream::expires_from_now`] getters] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_socket_iostream.expires_after |
| `basic_socket_iostream::expires_after`]] |
| [[link asio.reference.basic_socket_iostream.expires_from_now |
| `basic_socket_iostream::expires_from_now`] setter] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_waitable_timer.cancel |
| `basic_waitable_timer::cancel`]] |
| [[link asio.reference.basic_waitable_timer.cancel |
| `basic_waitable_timer::cancel`] overload that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.basic_waitable_timer.cancel_one |
| `basic_waitable_timer::cancel_one`]] |
| [[link asio.reference.basic_waitable_timer.cancel_one |
| `basic_waitable_timer::cancel_one`] overload that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.basic_waitable_timer.expires_at |
| `basic_waitable_timer::expires_at`] setter] |
| [[link asio.reference.basic_waitable_timer.expires_at |
| `basic_waitable_timer::expires_at`] setter that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.basic_waitable_timer.expiry |
| `basic_waitable_timer::expiry`]] |
| [[link asio.reference.basic_waitable_timer.expires_at |
| `basic_waitable_timer::expires_at`] and [link |
| asio.reference.basic_waitable_timer.expires_from_now |
| `basic_waitable_timer::expires_from_now`] getters] |
| [] |
| ] |
| [ |
| [[link asio.reference.basic_waitable_timer.expires_after |
| `basic_waitable_timer::expires_after`]] |
| [[link asio.reference.basic_waitable_timer.expires_from_now |
| `basic_waitable_timer::expires_from_now`] setter] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__address.make_address `ip::make_address`]] |
| [[link asio.reference.ip__address.from_string `ip::address::from_string`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__address_v4.make_address_v4 `ip::make_address_v4`]] |
| [[link asio.reference.ip__address_v4.from_string |
| `ip::address_v4::from_string`] and [link |
| asio.reference.ip__address_v6.to_v4 `ip::address_v6::to_v4`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__address_v6.make_address_v6 `ip::make_address_v6`]] |
| [[link asio.reference.ip__address_v6.from_string |
| `ip::address_v6::from_string`] and [link |
| asio.reference.ip__address_v6.v4_mapped `ip::address_v6::v4_mapped`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__address.to_string `ip::address::to_string`]] |
| [[link asio.reference.ip__address.to_string `ip::address::to_string`] that |
| takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.ip__address_v4.to_string `ip::address_v4::to_string`]] |
| [[link asio.reference.ip__address_v4.to_string `ip::address_v4::to_string`] |
| that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [[link asio.reference.ip__address_v6.to_string `ip::address_v6::to_string`]] |
| [[link asio.reference.ip__address_v6.to_string `ip::address_v6::to_string`] |
| that takes `error_code&`] |
| [The `error_code` overload is not required.] |
| ] |
| [ |
| [No replacement] |
| [[link asio.reference.ip__address_v6.is_v4_compatible |
| `ip::address_v6::is_v4_compatible`] and [link |
| asio.reference.ip__address_v6.v4_compatible |
| `ip::address_v6::v4_compatible`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__network_v4 `ip::network_v4`]] |
| [[link asio.reference.ip__address_v4.broadcast `ip::address_v4::broadcast`], |
| [link asio.reference.ip__address_v4.is_class_a `ip::address_v4::is_class_a`], |
| [link asio.reference.ip__address_v4.is_class_b `ip::address_v4::is_class_b`], |
| [link asio.reference.ip__address_v4.is_class_c `ip::address_v4::is_class_c`], |
| and [link asio.reference.ip__address_v4.netmask `ip::address_v4::netmask`]] |
| [The `network_v4` class adds the ability to manipulate IPv4 network |
| addresses using CIDR notation.] |
| ] |
| [ |
| [[link asio.reference.ip__network_v6 `ip::network_v6`]] |
| [] |
| [The `network_v6` class adds the ability to manipulate IPv6 network |
| addresses using CIDR notation.] |
| ] |
| [ |
| [[link asio.reference.ip__basic_address_iterator_lt__address_v4__gt_ |
| `ip::address_v4_iterator`] and [link |
| asio.reference.ip__basic_address_range_lt__address_v4__gt_ |
| `ip::address_v4_range`]] |
| [] |
| [The `ip::address_v4_iterator` and `address_v4_range` classes add the |
| ability to iterate over all, or a subset of, IPv4 addresses.] |
| ] |
| [ |
| [[link asio.reference.ip__basic_address_iterator_lt__address_v6__gt_ |
| `ip::address_v6_iterator`] and [link |
| asio.reference.ip__basic_address_range_lt__address_v6__gt_ |
| `ip::address_v6_range`]] |
| [] |
| [The `ip::address_v6_iterator` and `address_v6_range` classes add the |
| ability to iterate over all, or a subset of, IPv6 addresses.] |
| ] |
| [ |
| [[link asio.reference.ip__basic_resolver.results_type |
| `ip::basic_resolver::results_type`]] |
| [[link asio.reference.ip__basic_resolver.iterator |
| `ip::basic_resolver::iterator`]] |
| [Resolvers now produce ranges rather than single iterators.] |
| ] |
| [ |
| [[link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] overloads taking hostname and service as |
| arguments] |
| [[link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] overloads taking a [link |
| asio.reference.ip__basic_resolver.query `ip::basic_resolver::query`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] returns a range] |
| [[link asio.reference.ip__basic_resolver.resolve |
| `ip::basic_resolver::resolve`] returns a single iterator] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__basic_resolver.async_resolve |
| `ip::basic_resolver::async_resolve`] overloads taking hostname and service |
| as arguments] |
| [[link asio.reference.ip__basic_resolver.async_resolve |
| `ip::basic_resolver::async_resolve`] overloads taking a [link |
| asio.reference.ip__basic_resolver.query `ip::basic_resolver::query`]] |
| [] |
| ] |
| [ |
| [[link asio.reference.ip__basic_resolver.async_resolve |
| `ip::basic_resolver::async_resolve`] calls the handler with a range] |
| [[link asio.reference.ip__basic_resolver.async_resolve |
| `ip::basic_resolver::async_resolve`] calls the handler with a single |
| iterator] |
| [] |
| ] |
| ] |
| |
| [endsect] |