multicast.hpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. //
  2. // multicast.hpp
  3. // ~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  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. #ifndef ASIO_IP_MULTICAST_HPP
  11. #define ASIO_IP_MULTICAST_HPP
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. # pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #include "asio/detail/push_options.hpp"
  16. #include "asio/detail/push_options.hpp"
  17. #include <cstddef>
  18. #include <boost/config.hpp>
  19. #include "asio/detail/pop_options.hpp"
  20. #include "asio/ip/detail/socket_option.hpp"
  21. namespace asio {
  22. namespace ip {
  23. namespace multicast {
  24. /// Socket option to join a multicast group on a specified interface.
  25. /**
  26. * Implements the IPPROTO_IP/IP_ADD_MEMBERSHIP socket option.
  27. *
  28. * @par Examples
  29. * Setting the option to join a multicast group:
  30. * @code
  31. * asio::ip::udp::socket socket(io_service);
  32. * ...
  33. * asio::ip::address multicast_address =
  34. * asio::ip::address::from_string("225.0.0.1");
  35. * asio::ip::multicast::join_group option(multicast_address);
  36. * socket.set_option(option);
  37. * @endcode
  38. *
  39. * @par Concepts:
  40. * SettableSocketOption.
  41. */
  42. #if defined(GENERATING_DOCUMENTATION)
  43. typedef implementation_defined join_group;
  44. #else
  45. typedef asio::ip::detail::socket_option::multicast_request<
  46. IPPROTO_IP, IP_ADD_MEMBERSHIP, IPPROTO_IPV6, IPV6_JOIN_GROUP> join_group;
  47. #endif
  48. /// Socket option to leave a multicast group on a specified interface.
  49. /**
  50. * Implements the IPPROTO_IP/IP_DROP_MEMBERSHIP socket option.
  51. *
  52. * @par Examples
  53. * Setting the option to leave a multicast group:
  54. * @code
  55. * asio::ip::udp::socket socket(io_service);
  56. * ...
  57. * asio::ip::address multicast_address =
  58. * asio::ip::address::from_string("225.0.0.1");
  59. * asio::ip::multicast::leave_group option(multicast_address);
  60. * socket.set_option(option);
  61. * @endcode
  62. *
  63. * @par Concepts:
  64. * SettableSocketOption.
  65. */
  66. #if defined(GENERATING_DOCUMENTATION)
  67. typedef implementation_defined leave_group;
  68. #else
  69. typedef asio::ip::detail::socket_option::multicast_request<
  70. IPPROTO_IP, IP_DROP_MEMBERSHIP, IPPROTO_IPV6, IPV6_LEAVE_GROUP> leave_group;
  71. #endif
  72. /// Socket option for local interface to use for outgoing multicast packets.
  73. /**
  74. * Implements the IPPROTO_IP/IP_MULTICAST_IF socket option.
  75. *
  76. * @par Examples
  77. * Setting the option:
  78. * @code
  79. * asio::ip::udp::socket socket(io_service);
  80. * ...
  81. * asio::ip::address_v4 local_interface =
  82. * asio::ip::address_v4::from_string("1.2.3.4");
  83. * asio::ip::multicast::outbound_interface option(local_interface);
  84. * socket.set_option(option);
  85. * @endcode
  86. *
  87. * @par Concepts:
  88. * SettableSocketOption.
  89. */
  90. #if defined(GENERATING_DOCUMENTATION)
  91. typedef implementation_defined outbound_interface;
  92. #else
  93. typedef asio::ip::detail::socket_option::network_interface<
  94. IPPROTO_IP, IP_MULTICAST_IF, IPPROTO_IPV6, IPV6_MULTICAST_IF>
  95. outbound_interface;
  96. #endif
  97. /// Socket option for time-to-live associated with outgoing multicast packets.
  98. /**
  99. * Implements the IPPROTO_IP/IP_MULTICAST_TTL socket option.
  100. *
  101. * @par Examples
  102. * Setting the option:
  103. * @code
  104. * asio::ip::udp::socket socket(io_service);
  105. * ...
  106. * asio::ip::multicast::hops option(4);
  107. * socket.set_option(option);
  108. * @endcode
  109. *
  110. * @par
  111. * Getting the current option value:
  112. * @code
  113. * asio::ip::udp::socket socket(io_service);
  114. * ...
  115. * asio::ip::multicast::hops option;
  116. * socket.get_option(option);
  117. * int ttl = option.value();
  118. * @endcode
  119. *
  120. * @par Concepts:
  121. * GettableSocketOption, SettableSocketOption.
  122. */
  123. #if defined(GENERATING_DOCUMENTATION)
  124. typedef implementation_defined hops;
  125. #else
  126. typedef asio::ip::detail::socket_option::multicast_hops<
  127. IPPROTO_IP, IP_MULTICAST_TTL, IPPROTO_IPV6, IPV6_MULTICAST_HOPS> hops;
  128. #endif
  129. /// Socket option determining whether outgoing multicast packets will be
  130. /// received on the same socket if it is a member of the multicast group.
  131. /**
  132. * Implements the IPPROTO_IP/IP_MULTICAST_LOOP socket option.
  133. *
  134. * @par Examples
  135. * Setting the option:
  136. * @code
  137. * asio::ip::udp::socket socket(io_service);
  138. * ...
  139. * asio::ip::multicast::enable_loopback option(true);
  140. * socket.set_option(option);
  141. * @endcode
  142. *
  143. * @par
  144. * Getting the current option value:
  145. * @code
  146. * asio::ip::udp::socket socket(io_service);
  147. * ...
  148. * asio::ip::multicast::enable_loopback option;
  149. * socket.get_option(option);
  150. * bool is_set = option.value();
  151. * @endcode
  152. *
  153. * @par Concepts:
  154. * GettableSocketOption, SettableSocketOption.
  155. */
  156. #if defined(GENERATING_DOCUMENTATION)
  157. typedef implementation_defined enable_loopback;
  158. #else
  159. typedef asio::ip::detail::socket_option::multicast_enable_loopback<
  160. IPPROTO_IP, IP_MULTICAST_LOOP, IPPROTO_IPV6, IPV6_MULTICAST_LOOP>
  161. enable_loopback;
  162. #endif
  163. } // namespace multicast
  164. } // namespace ip
  165. } // namespace asio
  166. #include "asio/detail/pop_options.hpp"
  167. #endif // ASIO_IP_MULTICAST_HPP