1#ifndef NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
2#define NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
15#ifdef NEFORCE_PLATFORM_WINDOWS
24#ifdef NEFORCE_PLATFORM_LINUX
25# include <netinet/in.h>
27NEFORCE_BEGIN_NAMESPACE__
72 explicit
ip_address(const ::sockaddr_in& addr4) noexcept :
79 explicit ip_address(const ::sockaddr_in6& addr6) noexcept :
92 NEFORCE_NODISCARD
bool is_valid() const noexcept {
return !addr_.holds_alternative<
none_t>(); }
98 NEFORCE_NODISCARD
bool is_ipv4() const noexcept {
return addr_.holds_alternative<::sockaddr_in>(); }
104 NEFORCE_NODISCARD
bool is_ipv6() const noexcept {
return addr_.holds_alternative<::sockaddr_in6>(); }
128 NEFORCE_NODISCARD const ::sockaddr*
data() const noexcept;
134 NEFORCE_NODISCARD ::sockaddr*
data() noexcept;
140 NEFORCE_NODISCARD
int size() const noexcept;
152 NEFORCE_NODISCARD
int family() const noexcept;
201NEFORCE_END_NAMESPACE__
NEFORCE_NODISCARD int size() const noexcept
获取地址结构大小
NEFORCE_NODISCARD bool is_valid() const noexcept
检查地址是否有效
NEFORCE_NODISCARDconst ::sockaddr * data() const noexcept
获取底层指针
static NEFORCE_NODISCARD ip_address any(ports port=ports::UNDEF, int family=AF_INET) noexcept
获取通配地址
NEFORCE_NODISCARD bool operator==(const ip_address &other) const
相等比较运算符
NEFORCE_NODISCARD bool is_ipv4() const noexcept
检查是否为IPv4地址
variant< none_t, ::sockaddr_in, ::sockaddr_in6 > address_type
地址存储类型
NEFORCE_NODISCARD const address_type & address() const noexcept
获取内部地址存储的常量引用
NEFORCE_NODISCARD ports port() const noexcept
获取端口号
NEFORCE_NODISCARD bool is_ipv6() const noexcept
检查是否为IPv6地址
NEFORCE_NODISCARD int family() const noexcept
获取地址族
NEFORCE_NODISCARD bool operator!=(const ip_address &other) const
不等比较运算符
ip_address() noexcept=default
默认构造函数
static NEFORCE_NODISCARD ip_address loopback(ports port=ports::UNDEF, int family=AF_INET) noexcept
获取回环地址
NEFORCE_NODISCARD string to_string() const
转换为字符串表示
ip_address(const ::sockaddr_in6 &addr6) noexcept
从IPv6地址构造
static NEFORCE_NODISCARD optional< ip_address > parse(const string &host, ports port=ports{}) noexcept
从字符串解析IP地址