]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // |
2 | // ip/multicast.hpp | |
3 | // ~~~~~~~~~~~~~~~~ | |
4 | // | |
1e59de90 | 5 | // Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
7c673cae FG |
6 | // |
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) | |
9 | // | |
10 | ||
11 | #ifndef BOOST_ASIO_IP_MULTICAST_HPP | |
12 | #define BOOST_ASIO_IP_MULTICAST_HPP | |
13 | ||
14 | #if defined(_MSC_VER) && (_MSC_VER >= 1200) | |
15 | # pragma once | |
16 | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) | |
17 | ||
18 | #include <boost/asio/detail/config.hpp> | |
19 | #include <cstddef> | |
20 | #include <boost/asio/ip/detail/socket_option.hpp> | |
21 | ||
22 | #include <boost/asio/detail/push_options.hpp> | |
23 | ||
24 | namespace boost { | |
25 | namespace asio { | |
26 | namespace ip { | |
27 | namespace multicast { | |
28 | ||
29 | /// Socket option to join a multicast group on a specified interface. | |
30 | /** | |
31 | * Implements the IPPROTO_IP/IP_ADD_MEMBERSHIP socket option. | |
32 | * | |
33 | * @par Examples | |
34 | * Setting the option to join a multicast group: | |
35 | * @code | |
92f5a8d4 | 36 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
37 | * ... |
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); | |
42 | * @endcode | |
43 | * | |
44 | * @par Concepts: | |
45 | * SettableSocketOption. | |
46 | */ | |
47 | #if defined(GENERATING_DOCUMENTATION) | |
48 | typedef implementation_defined join_group; | |
49 | #else | |
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; | |
55 | #endif | |
56 | ||
57 | /// Socket option to leave a multicast group on a specified interface. | |
58 | /** | |
59 | * Implements the IPPROTO_IP/IP_DROP_MEMBERSHIP socket option. | |
60 | * | |
61 | * @par Examples | |
62 | * Setting the option to leave a multicast group: | |
63 | * @code | |
92f5a8d4 | 64 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
65 | * ... |
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); | |
70 | * @endcode | |
71 | * | |
72 | * @par Concepts: | |
73 | * SettableSocketOption. | |
74 | */ | |
75 | #if defined(GENERATING_DOCUMENTATION) | |
76 | typedef implementation_defined leave_group; | |
77 | #else | |
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; | |
83 | #endif | |
84 | ||
85 | /// Socket option for local interface to use for outgoing multicast packets. | |
86 | /** | |
87 | * Implements the IPPROTO_IP/IP_MULTICAST_IF socket option. | |
88 | * | |
89 | * @par Examples | |
90 | * Setting the option: | |
91 | * @code | |
92f5a8d4 | 92 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
93 | * ... |
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); | |
98 | * @endcode | |
99 | * | |
100 | * @par Concepts: | |
101 | * SettableSocketOption. | |
102 | */ | |
103 | #if defined(GENERATING_DOCUMENTATION) | |
104 | typedef implementation_defined outbound_interface; | |
105 | #else | |
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; | |
111 | #endif | |
112 | ||
113 | /// Socket option for time-to-live associated with outgoing multicast packets. | |
114 | /** | |
115 | * Implements the IPPROTO_IP/IP_MULTICAST_TTL socket option. | |
116 | * | |
117 | * @par Examples | |
118 | * Setting the option: | |
119 | * @code | |
92f5a8d4 | 120 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
121 | * ... |
122 | * boost::asio::ip::multicast::hops option(4); | |
123 | * socket.set_option(option); | |
124 | * @endcode | |
125 | * | |
126 | * @par | |
127 | * Getting the current option value: | |
128 | * @code | |
92f5a8d4 | 129 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
130 | * ... |
131 | * boost::asio::ip::multicast::hops option; | |
132 | * socket.get_option(option); | |
133 | * int ttl = option.value(); | |
134 | * @endcode | |
135 | * | |
136 | * @par Concepts: | |
137 | * GettableSocketOption, SettableSocketOption. | |
138 | */ | |
139 | #if defined(GENERATING_DOCUMENTATION) | |
140 | typedef implementation_defined hops; | |
141 | #else | |
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; | |
147 | #endif | |
148 | ||
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. | |
151 | /** | |
152 | * Implements the IPPROTO_IP/IP_MULTICAST_LOOP socket option. | |
153 | * | |
154 | * @par Examples | |
155 | * Setting the option: | |
156 | * @code | |
92f5a8d4 | 157 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
158 | * ... |
159 | * boost::asio::ip::multicast::enable_loopback option(true); | |
160 | * socket.set_option(option); | |
161 | * @endcode | |
162 | * | |
163 | * @par | |
164 | * Getting the current option value: | |
165 | * @code | |
92f5a8d4 | 166 | * boost::asio::ip::udp::socket socket(my_context); |
7c673cae FG |
167 | * ... |
168 | * boost::asio::ip::multicast::enable_loopback option; | |
169 | * socket.get_option(option); | |
170 | * bool is_set = option.value(); | |
171 | * @endcode | |
172 | * | |
173 | * @par Concepts: | |
174 | * GettableSocketOption, SettableSocketOption. | |
175 | */ | |
176 | #if defined(GENERATING_DOCUMENTATION) | |
177 | typedef implementation_defined enable_loopback; | |
178 | #else | |
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; | |
184 | #endif | |
185 | ||
186 | } // namespace multicast | |
187 | } // namespace ip | |
188 | } // namespace asio | |
189 | } // namespace boost | |
190 | ||
191 | #include <boost/asio/detail/pop_options.hpp> | |
192 | ||
193 | #endif // BOOST_ASIO_IP_MULTICAST_HPP |