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