Revert "Change ip::address default constructor to be not-an-address." This reverts commit d8a2f7087d0f7954ec83f17d23519835959c13bd.
diff --git a/asio/include/asio/ip/address.hpp b/asio/include/asio/ip/address.hpp index 7cddee2..ad20c45 100644 --- a/asio/include/asio/ip/address.hpp +++ b/asio/include/asio/ip/address.hpp
@@ -179,7 +179,7 @@ } // The type of the address. - enum { none, ipv4, ipv6 } type_; + enum { ipv4, ipv6 } type_; // The underlying IPv4 address. asio::ip::address_v4 ipv4_address_;
diff --git a/asio/include/asio/ip/basic_endpoint.hpp b/asio/include/asio/ip/basic_endpoint.hpp index f4c9bdc..a1bae97 100644 --- a/asio/include/asio/ip/basic_endpoint.hpp +++ b/asio/include/asio/ip/basic_endpoint.hpp
@@ -124,9 +124,9 @@ /// The protocol associated with the endpoint. protocol_type protocol() const { - if (impl_.is_v6()) - return InternetProtocol::v6(); - return InternetProtocol::v4(); + if (impl_.is_v4()) + return InternetProtocol::v4(); + return InternetProtocol::v6(); } /// Get the underlying endpoint in the native type.
diff --git a/asio/include/asio/ip/detail/endpoint.hpp b/asio/include/asio/ip/detail/endpoint.hpp index 42b8f89..847ca4c 100644 --- a/asio/include/asio/ip/detail/endpoint.hpp +++ b/asio/include/asio/ip/detail/endpoint.hpp
@@ -111,12 +111,6 @@ return data_.base.sa_family == ASIO_OS_DEF(AF_INET); } - // Determine whether the endpoint is IPv6. - bool is_v6() const - { - return data_.base.sa_family == ASIO_OS_DEF(AF_INET6); - } - #if !defined(ASIO_NO_IOSTREAM) // Convert to a string. ASIO_DECL std::string to_string(asio::error_code& ec) const;
diff --git a/asio/include/asio/ip/detail/impl/endpoint.ipp b/asio/include/asio/ip/detail/impl/endpoint.ipp index b2ca0d6..dc3e6b3 100644 --- a/asio/include/asio/ip/detail/impl/endpoint.ipp +++ b/asio/include/asio/ip/detail/impl/endpoint.ipp
@@ -50,7 +50,7 @@ asio::detail::socket_ops::host_to_network_short(port_num); data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY); } - else if (family == ASIO_OS_DEF(AF_INET6)) + else { data_.v6.sin6_family = ASIO_OS_DEF(AF_INET6); data_.v6.sin6_port = @@ -66,13 +66,6 @@ data_.v6.sin6_addr.s6_addr[14] = 0, data_.v6.sin6_addr.s6_addr[15] = 0; data_.v6.sin6_scope_id = 0; } - else - { - data_.v4.sin_family = ASIO_OS_DEF(AF_UNSPEC); - data_.v4.sin_port = - asio::detail::socket_ops::host_to_network_short(port_num); - data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY); - } } endpoint::endpoint(const asio::ip::address& addr, @@ -90,7 +83,7 @@ static_cast<asio::detail::u_long_type>( address_cast<address_v4>(addr).to_ulong())); } - else if (addr.is_v6()) + else { data_.v6.sin6_family = ASIO_OS_DEF(AF_INET6); data_.v6.sin6_port = @@ -103,18 +96,11 @@ static_cast<asio::detail::u_long_type>( v6_addr.scope_id()); } - else - { - data_.v4.sin_family = ASIO_OS_DEF(AF_UNSPEC); - data_.v4.sin_port = - asio::detail::socket_ops::host_to_network_short(port_num); - data_.v4.sin_addr.s_addr = ASIO_OS_DEF(INADDR_ANY); - } } void endpoint::resize(std::size_t new_size) { - if (new_size > sizeof(data_)) + if (new_size > sizeof(asio::detail::sockaddr_storage_type)) { asio::error_code ec(asio::error::invalid_argument); asio::detail::throw_error(ec); @@ -123,28 +109,28 @@ unsigned short endpoint::port() const { - if (is_v6()) + if (is_v4()) { return asio::detail::socket_ops::network_to_host_short( - data_.v6.sin6_port); + data_.v4.sin_port); } else { return asio::detail::socket_ops::network_to_host_short( - data_.v4.sin_port); + data_.v6.sin6_port); } } void endpoint::port(unsigned short port_num) { - if (is_v6()) + if (is_v4()) { - data_.v6.sin6_port + data_.v4.sin_port = asio::detail::socket_ops::host_to_network_short(port_num); } else { - data_.v4.sin_port + data_.v6.sin6_port = asio::detail::socket_ops::host_to_network_short(port_num); } } @@ -158,7 +144,7 @@ asio::detail::socket_ops::network_to_host_long( data_.v4.sin_addr.s_addr)); } - else if (is_v6()) + else { asio::ip::address_v6::bytes_type bytes; #if defined(ASIO_HAS_STD_ARRAY) @@ -168,10 +154,6 @@ #endif // defined(ASIO_HAS_STD_ARRAY) return asio::ip::address_v6(bytes, data_.v6.sin6_scope_id); } - else - { - return asio::ip::address(); - } } void endpoint::address(const asio::ip::address& addr)
diff --git a/asio/include/asio/ip/impl/address.ipp b/asio/include/asio/ip/impl/address.ipp index e7745b4..664c53d 100644 --- a/asio/include/asio/ip/impl/address.ipp +++ b/asio/include/asio/ip/impl/address.ipp
@@ -30,7 +30,7 @@ namespace ip { address::address() - : type_(none), + : type_(ipv4), ipv4_address_(), ipv6_address_() { @@ -158,81 +158,46 @@ std::string address::to_string() const { - switch (type_) - { - case ipv4: - return ipv4_address_.to_string(); - case ipv6: + if (type_ == ipv6) return ipv6_address_.to_string(); - default: - bad_address_cast ex; - asio::detail::throw_exception(ex); - return std::string(); - } + return ipv4_address_.to_string(); } std::string address::to_string(asio::error_code& ec) const { - switch (type_) - { - case ipv4: - return ipv4_address_.to_string(ec); - case ipv6: + if (type_ == ipv6) return ipv6_address_.to_string(ec); - default: - ec = asio::error::invalid_argument; - return std::string(); - } + return ipv4_address_.to_string(ec); } bool address::is_loopback() const { - switch (type_) - { - case ipv4: - return ipv4_address_.is_loopback(); - case ipv6: - return ipv6_address_.is_loopback(); - default: - return false; - } + return (type_ == ipv4) + ? ipv4_address_.is_loopback() + : ipv6_address_.is_loopback(); } bool address::is_unspecified() const { - switch (type_) - { - case ipv4: - return ipv4_address_.is_unspecified(); - case ipv6: - return ipv6_address_.is_unspecified(); - default: - return false; - } + return (type_ == ipv4) + ? ipv4_address_.is_unspecified() + : ipv6_address_.is_unspecified(); } bool address::is_multicast() const { - switch (type_) - { - case ipv4: - return ipv4_address_.is_multicast(); - case ipv6: - return ipv6_address_.is_multicast(); - default: - return false; - } + return (type_ == ipv4) + ? ipv4_address_.is_multicast() + : ipv6_address_.is_multicast(); } bool operator==(const address& a1, const address& a2) { if (a1.type_ != a2.type_) return false; - if (a1.type_ == address::ipv4) - return a1.ipv4_address_ == a2.ipv4_address_; if (a1.type_ == address::ipv6) return a1.ipv6_address_ == a2.ipv6_address_; - return true; + return a1.ipv4_address_ == a2.ipv4_address_; } bool operator<(const address& a1, const address& a2) @@ -241,11 +206,9 @@ return true; if (a1.type_ > a2.type_) return false; - if (a1.type_ == address::ipv4) - return a1.ipv4_address_ < a2.ipv4_address_; if (a1.type_ == address::ipv6) return a1.ipv6_address_ < a2.ipv6_address_; - return false; + return a1.ipv4_address_ < a2.ipv4_address_; } } // namespace ip