diff options
Diffstat (limited to '3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp')
-rw-r--r-- | 3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp | 45 |
1 files changed, 10 insertions, 35 deletions
diff --git a/3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp b/3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp index 6fde8c3..041a9f8 100644 --- a/3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp +++ b/3rdParty/Boost/src/boost/asio/ip/detail/socket_option.hpp @@ -2,7 +2,7 @@ // detail/socket_option.hpp // ~~~~~~~~~~~~~~~~~~~~~~~~ // -// Copyright (c) 2003-2011 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2012 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) @@ -18,6 +18,7 @@ #include <boost/asio/detail/config.hpp> #include <cstddef> #include <cstring> +#include <stdexcept> #include <boost/throw_exception.hpp> #include <boost/asio/detail/socket_ops.hpp> #include <boost/asio/detail/socket_types.hpp> @@ -385,35 +386,22 @@ class multicast_request public: // Default constructor. multicast_request() + : ipv4_value_(), // Zero-initialisation gives the "any" address. + ipv6_value_() // Zero-initialisation gives the "any" address. { - ipv4_value_.imr_multiaddr.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - ipv4_value_.imr_interface.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - - boost::asio::detail::in6_addr_type tmp_addr = IN6ADDR_ANY_INIT; - ipv6_value_.ipv6mr_multiaddr = tmp_addr; - ipv6_value_.ipv6mr_interface = 0; } // Construct with multicast address only. explicit multicast_request(const boost::asio::ip::address& multicast_address) + : ipv4_value_(), // Zero-initialisation gives the "any" address. + ipv6_value_() // Zero-initialisation gives the "any" address. { if (multicast_address.is_v6()) { - ipv4_value_.imr_multiaddr.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - ipv4_value_.imr_interface.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - using namespace std; // For memcpy. boost::asio::ip::address_v6 ipv6_address = multicast_address.to_v6(); boost::asio::ip::address_v6::bytes_type bytes = ipv6_address.to_bytes(); - memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.elems, 16); + memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16); ipv6_value_.ipv6mr_interface = 0; } else @@ -424,10 +412,6 @@ public: ipv4_value_.imr_interface.s_addr = boost::asio::detail::socket_ops::host_to_network_long( boost::asio::ip::address_v4::any().to_ulong()); - - boost::asio::detail::in6_addr_type tmp_addr = IN6ADDR_ANY_INIT; - ipv6_value_.ipv6mr_multiaddr = tmp_addr; - ipv6_value_.ipv6mr_interface = 0; } } @@ -436,6 +420,7 @@ public: const boost::asio::ip::address_v4& multicast_address, const boost::asio::ip::address_v4& network_interface = boost::asio::ip::address_v4::any()) + : ipv6_value_() // Zero-initialisation gives the "any" address. { ipv4_value_.imr_multiaddr.s_addr = boost::asio::detail::socket_ops::host_to_network_long( @@ -443,28 +428,18 @@ public: ipv4_value_.imr_interface.s_addr = boost::asio::detail::socket_ops::host_to_network_long( network_interface.to_ulong()); - - boost::asio::detail::in6_addr_type tmp_addr = IN6ADDR_ANY_INIT; - ipv6_value_.ipv6mr_multiaddr = tmp_addr; - ipv6_value_.ipv6mr_interface = 0; } // Construct with multicast address and IPv6 network interface index. explicit multicast_request( const boost::asio::ip::address_v6& multicast_address, unsigned long network_interface = 0) + : ipv4_value_() // Zero-initialisation gives the "any" address. { - ipv4_value_.imr_multiaddr.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - ipv4_value_.imr_interface.s_addr = - boost::asio::detail::socket_ops::host_to_network_long( - boost::asio::ip::address_v4::any().to_ulong()); - using namespace std; // For memcpy. boost::asio::ip::address_v6::bytes_type bytes = multicast_address.to_bytes(); - memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.elems, 16); + memcpy(ipv6_value_.ipv6mr_multiaddr.s6_addr, bytes.data(), 16); ipv6_value_.ipv6mr_interface = network_interface; } |