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]
26 lines
651 B
C++
26 lines
651 B
C++
//
|
|
// generic/basic_endpoint.cpp
|
|
// ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
//
|
|
// Copyright (c) 2003-2013 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)
|
|
//
|
|
|
|
// Disable autolinking for unit tests.
|
|
#if !defined(BOOST_ALL_NO_LIB)
|
|
#define BOOST_ALL_NO_LIB 1
|
|
#endif // !defined(BOOST_ALL_NO_LIB)
|
|
|
|
// Test that header file is self-contained.
|
|
#include <boost/asio/generic/basic_endpoint.hpp>
|
|
|
|
#include "../unit_test.hpp"
|
|
|
|
BOOST_ASIO_TEST_SUITE
|
|
(
|
|
"generic/basic_endpoint",
|
|
BOOST_ASIO_TEST_CASE(null_test)
|
|
)
|