5 // Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7 // Distributed under the Boost Software License, Version 1.0. (See accompanying
8 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
11 #ifndef BOOST_ASIO_IP_MULTICAST_HPP
12 #define BOOST_ASIO_IP_MULTICAST_HPP
14 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
16 #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
18 #include <boost/asio/detail/config.hpp>
20 #include <boost/asio/ip/detail/socket_option.hpp>
22 #include <boost/asio/detail/push_options.hpp>
29 /// Socket option to join a multicast group on a specified interface.
31 * Implements the IPPROTO_IP/IP_ADD_MEMBERSHIP socket option.
34 * Setting the option to join a multicast group:
36 * boost::asio::ip::udp::socket socket(io_context);
38 * boost::asio::ip::address multicast_address =
39 * boost::asio::ip::address::from_string("225.0.0.1");
40 * boost::asio::ip::multicast::join_group option(multicast_address);
41 * socket.set_option(option);
45 * SettableSocketOption.
47 #if defined(GENERATING_DOCUMENTATION)
48 typedef implementation_defined join_group;
50 typedef boost::asio::ip::detail::socket_option::multicast_request<
51 BOOST_ASIO_OS_DEF(IPPROTO_IP),
52 BOOST_ASIO_OS_DEF(IP_ADD_MEMBERSHIP),
53 BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
54 BOOST_ASIO_OS_DEF(IPV6_JOIN_GROUP)> join_group;
57 /// Socket option to leave a multicast group on a specified interface.
59 * Implements the IPPROTO_IP/IP_DROP_MEMBERSHIP socket option.
62 * Setting the option to leave a multicast group:
64 * boost::asio::ip::udp::socket socket(io_context);
66 * boost::asio::ip::address multicast_address =
67 * boost::asio::ip::address::from_string("225.0.0.1");
68 * boost::asio::ip::multicast::leave_group option(multicast_address);
69 * socket.set_option(option);
73 * SettableSocketOption.
75 #if defined(GENERATING_DOCUMENTATION)
76 typedef implementation_defined leave_group;
78 typedef boost::asio::ip::detail::socket_option::multicast_request<
79 BOOST_ASIO_OS_DEF(IPPROTO_IP),
80 BOOST_ASIO_OS_DEF(IP_DROP_MEMBERSHIP),
81 BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
82 BOOST_ASIO_OS_DEF(IPV6_LEAVE_GROUP)> leave_group;
85 /// Socket option for local interface to use for outgoing multicast packets.
87 * Implements the IPPROTO_IP/IP_MULTICAST_IF socket option.
92 * boost::asio::ip::udp::socket socket(io_context);
94 * boost::asio::ip::address_v4 local_interface =
95 * boost::asio::ip::address_v4::from_string("1.2.3.4");
96 * boost::asio::ip::multicast::outbound_interface option(local_interface);
97 * socket.set_option(option);
101 * SettableSocketOption.
103 #if defined(GENERATING_DOCUMENTATION)
104 typedef implementation_defined outbound_interface;
106 typedef boost::asio::ip::detail::socket_option::network_interface<
107 BOOST_ASIO_OS_DEF(IPPROTO_IP),
108 BOOST_ASIO_OS_DEF(IP_MULTICAST_IF),
109 BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
110 BOOST_ASIO_OS_DEF(IPV6_MULTICAST_IF)> outbound_interface;
113 /// Socket option for time-to-live associated with outgoing multicast packets.
115 * Implements the IPPROTO_IP/IP_MULTICAST_TTL socket option.
118 * Setting the option:
120 * boost::asio::ip::udp::socket socket(io_context);
122 * boost::asio::ip::multicast::hops option(4);
123 * socket.set_option(option);
127 * Getting the current option value:
129 * boost::asio::ip::udp::socket socket(io_context);
131 * boost::asio::ip::multicast::hops option;
132 * socket.get_option(option);
133 * int ttl = option.value();
137 * GettableSocketOption, SettableSocketOption.
139 #if defined(GENERATING_DOCUMENTATION)
140 typedef implementation_defined hops;
142 typedef boost::asio::ip::detail::socket_option::multicast_hops<
143 BOOST_ASIO_OS_DEF(IPPROTO_IP),
144 BOOST_ASIO_OS_DEF(IP_MULTICAST_TTL),
145 BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
146 BOOST_ASIO_OS_DEF(IPV6_MULTICAST_HOPS)> hops;
149 /// Socket option determining whether outgoing multicast packets will be
150 /// received on the same socket if it is a member of the multicast group.
152 * Implements the IPPROTO_IP/IP_MULTICAST_LOOP socket option.
155 * Setting the option:
157 * boost::asio::ip::udp::socket socket(io_context);
159 * boost::asio::ip::multicast::enable_loopback option(true);
160 * socket.set_option(option);
164 * Getting the current option value:
166 * boost::asio::ip::udp::socket socket(io_context);
168 * boost::asio::ip::multicast::enable_loopback option;
169 * socket.get_option(option);
170 * bool is_set = option.value();
174 * GettableSocketOption, SettableSocketOption.
176 #if defined(GENERATING_DOCUMENTATION)
177 typedef implementation_defined enable_loopback;
179 typedef boost::asio::ip::detail::socket_option::multicast_enable_loopback<
180 BOOST_ASIO_OS_DEF(IPPROTO_IP),
181 BOOST_ASIO_OS_DEF(IP_MULTICAST_LOOP),
182 BOOST_ASIO_OS_DEF(IPPROTO_IPV6),
183 BOOST_ASIO_OS_DEF(IPV6_MULTICAST_LOOP)> enable_loopback;
186 } // namespace multicast
191 #include <boost/asio/detail/pop_options.hpp>
193 #endif // BOOST_ASIO_IP_MULTICAST_HPP