mirror of
https://github.com/boostorg/asio.git
synced 2026-01-27 18:42:07 +00:00
Four new protocol classes have been added: - asio::generic::datagram_protocol - asio::generic::raw_protocol - asio::generic::seq_packet_protocol - asio::generic::stream_protocol These classes implement the Protocol type requirements, but allow the user to specify the address family (e.g. AF_INET) and protocol type (e.g. IPPROTO_TCP) at runtime. A new endpoint class template, asio::generic::basic_endpoint, has been added to support these new protocol classes. This endpoint can hold any other endpoint type, provided its native representation fits into a sockaddr_storage object. When using C++11, it is now possible to perform move construction from a socket (or acceptor) object to convert to the more generic protocol's socket (or acceptor) type. If the protocol conversion is valid: Protocol1 p1 = ...; Protocol2 p2(p1); then the corresponding socket conversion is allowed: Protocol1::socket socket1(io_service); ... Protocol2::socket socket2(std::move(socket1)); For example, one possible conversion is from a TCP socket to a generic stream-oriented socket: asio::ip::tcp::socket socket1(io_service); ... asio::generic::stream_protocol::socket socket2(std::move(socket1)); The conversion is also available for move-assignment. Note that these conversions are not limited to the newly added generic protocol classes. User-defined protocols may take advantage of this feature by similarly ensuring the conversion from Protocol1 to Protocol2 is valid, as above. As a convenience, the socket acceptor's accept() and async_accept() functions have been changed so that they can directly accept into a different protocol's socket type, provided the protocol conversion is valid. For example, the following is now possible: asio::ip::tcp::acceptor acceptor(io_service); ... asio::generic::stream_protocol::socket socket1(io_service); acceptor.accept(socket1); [SVN r84363]
651 B
651 B