Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-24 09:41:57

0001 //
0002 // ip/multicast.hpp
0003 // ~~~~~~~~~~~~~~~~
0004 //
0005 // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com)
0006 //
0007 // Distributed under the Boost Software License, Version 1.0. (See accompanying
0008 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0009 //
0010 
0011 #ifndef BOOST_ASIO_IP_MULTICAST_HPP
0012 #define BOOST_ASIO_IP_MULTICAST_HPP
0013 
0014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0015 # pragma once
0016 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
0017 
0018 #include <boost/asio/detail/config.hpp>
0019 #include <cstddef>
0020 #include <boost/asio/ip/detail/socket_option.hpp>
0021 
0022 #include <boost/asio/detail/push_options.hpp>
0023 
0024 namespace boost {
0025 namespace asio {
0026 namespace ip {
0027 namespace multicast {
0028 
0029 /// Socket option to join a multicast group on a specified interface.
0030 /**
0031  * Implements the IPPROTO_IP/IP_ADD_MEMBERSHIP socket option.
0032  *
0033  * @par Examples
0034  * Setting the option to join a multicast group:
0035  * @code
0036  * boost::asio::ip::udp::socket socket(my_context);
0037  * ...
0038  * boost::asio::ip::address multicast_address =
0039  *   boost::asio::ip::address::from_string("225.0.0.1");
0040  * boost::asio::ip::multicast::join_group option(multicast_address);
0041  * socket.set_option(option);
0042  * @endcode
0043  *
0044  * @par Concepts:
0045  * SettableSocketOption.
0046  */
0047 #if defined(GENERATING_DOCUMENTATION)
0048 typedef implementation_defined join_group;
0049 #else
0050 typedef boost::asio::ip::detail::socket_option::multicast_request<
0051   BOOST_ASIO_OS_DEF(IPPROTO_IP),
0052   BOOST_ASIO_OS_DEF(IP_ADD_MEMBERSHIP),
0053   BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
0054   BOOST_ASIO_OS_DEF(IPV6_JOIN_GROUP)> join_group;
0055 #endif
0056 
0057 /// Socket option to leave a multicast group on a specified interface.
0058 /**
0059  * Implements the IPPROTO_IP/IP_DROP_MEMBERSHIP socket option.
0060  *
0061  * @par Examples
0062  * Setting the option to leave a multicast group:
0063  * @code
0064  * boost::asio::ip::udp::socket socket(my_context);
0065  * ...
0066  * boost::asio::ip::address multicast_address =
0067  *   boost::asio::ip::address::from_string("225.0.0.1");
0068  * boost::asio::ip::multicast::leave_group option(multicast_address);
0069  * socket.set_option(option);
0070  * @endcode
0071  *
0072  * @par Concepts:
0073  * SettableSocketOption.
0074  */
0075 #if defined(GENERATING_DOCUMENTATION)
0076 typedef implementation_defined leave_group;
0077 #else
0078 typedef boost::asio::ip::detail::socket_option::multicast_request<
0079   BOOST_ASIO_OS_DEF(IPPROTO_IP),
0080   BOOST_ASIO_OS_DEF(IP_DROP_MEMBERSHIP),
0081   BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
0082   BOOST_ASIO_OS_DEF(IPV6_LEAVE_GROUP)> leave_group;
0083 #endif
0084 
0085 /// Socket option for local interface to use for outgoing multicast packets.
0086 /**
0087  * Implements the IPPROTO_IP/IP_MULTICAST_IF socket option.
0088  *
0089  * @par Examples
0090  * Setting the option:
0091  * @code
0092  * boost::asio::ip::udp::socket socket(my_context);
0093  * ...
0094  * boost::asio::ip::address_v4 local_interface =
0095  *   boost::asio::ip::address_v4::from_string("1.2.3.4");
0096  * boost::asio::ip::multicast::outbound_interface option(local_interface);
0097  * socket.set_option(option);
0098  * @endcode
0099  *
0100  * @par Concepts:
0101  * SettableSocketOption.
0102  */
0103 #if defined(GENERATING_DOCUMENTATION)
0104 typedef implementation_defined outbound_interface;
0105 #else
0106 typedef boost::asio::ip::detail::socket_option::network_interface<
0107   BOOST_ASIO_OS_DEF(IPPROTO_IP),
0108   BOOST_ASIO_OS_DEF(IP_MULTICAST_IF),
0109   BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
0110   BOOST_ASIO_OS_DEF(IPV6_MULTICAST_IF)> outbound_interface;
0111 #endif
0112 
0113 /// Socket option for time-to-live associated with outgoing multicast packets.
0114 /**
0115  * Implements the IPPROTO_IP/IP_MULTICAST_TTL socket option.
0116  *
0117  * @par Examples
0118  * Setting the option:
0119  * @code
0120  * boost::asio::ip::udp::socket socket(my_context);
0121  * ...
0122  * boost::asio::ip::multicast::hops option(4);
0123  * socket.set_option(option);
0124  * @endcode
0125  *
0126  * @par
0127  * Getting the current option value:
0128  * @code
0129  * boost::asio::ip::udp::socket socket(my_context);
0130  * ...
0131  * boost::asio::ip::multicast::hops option;
0132  * socket.get_option(option);
0133  * int ttl = option.value();
0134  * @endcode
0135  *
0136  * @par Concepts:
0137  * GettableSocketOption, SettableSocketOption.
0138  */
0139 #if defined(GENERATING_DOCUMENTATION)
0140 typedef implementation_defined hops;
0141 #else
0142 typedef boost::asio::ip::detail::socket_option::multicast_hops<
0143   BOOST_ASIO_OS_DEF(IPPROTO_IP),
0144   BOOST_ASIO_OS_DEF(IP_MULTICAST_TTL),
0145   BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
0146   BOOST_ASIO_OS_DEF(IPV6_MULTICAST_HOPS)> hops;
0147 #endif
0148 
0149 /// Socket option determining whether outgoing multicast packets will be
0150 /// received on the same socket if it is a member of the multicast group.
0151 /**
0152  * Implements the IPPROTO_IP/IP_MULTICAST_LOOP socket option.
0153  *
0154  * @par Examples
0155  * Setting the option:
0156  * @code
0157  * boost::asio::ip::udp::socket socket(my_context);
0158  * ...
0159  * boost::asio::ip::multicast::enable_loopback option(true);
0160  * socket.set_option(option);
0161  * @endcode
0162  *
0163  * @par
0164  * Getting the current option value:
0165  * @code
0166  * boost::asio::ip::udp::socket socket(my_context);
0167  * ...
0168  * boost::asio::ip::multicast::enable_loopback option;
0169  * socket.get_option(option);
0170  * bool is_set = option.value();
0171  * @endcode
0172  *
0173  * @par Concepts:
0174  * GettableSocketOption, SettableSocketOption.
0175  */
0176 #if defined(GENERATING_DOCUMENTATION)
0177 typedef implementation_defined enable_loopback;
0178 #else
0179 typedef boost::asio::ip::detail::socket_option::multicast_enable_loopback<
0180   BOOST_ASIO_OS_DEF(IPPROTO_IP),
0181   BOOST_ASIO_OS_DEF(IP_MULTICAST_LOOP),
0182   BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
0183   BOOST_ASIO_OS_DEF(IPV6_MULTICAST_LOOP)> enable_loopback;
0184 #endif
0185 
0186 } // namespace multicast
0187 } // namespace ip
0188 } // namespace asio
0189 } // namespace boost
0190 
0191 #include <boost/asio/detail/pop_options.hpp>
0192 
0193 #endif // BOOST_ASIO_IP_MULTICAST_HPP