NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
ip_address.hpp
浏览该文件的文档.
1#ifndef NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
2#define NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
3
10
15#ifdef NEFORCE_PLATFORM_WINDOWS
16# include <ws2tcpip.h>
17# ifdef max
18# undef max
19# endif
20# ifdef min
21# undef min
22# endif
23#endif
24#ifdef NEFORCE_PLATFORM_LINUX
25# include <netinet/in.h>
26#endif
27NEFORCE_BEGIN_NAMESPACE__
28
33
38
53class NEFORCE_API ip_address : public istringify<ip_address> {
54public:
56
57private:
58 address_type addr_;
59
60public:
66 ip_address() noexcept = default;
67
72 explicit ip_address(const ::sockaddr_in& addr4) noexcept :
73 addr_(addr4) {}
74
79 explicit ip_address(const ::sockaddr_in6& addr6) noexcept :
80 addr_(addr6) {}
81
82 ip_address(const ip_address& other) noexcept = default;
83 ip_address& operator=(const ip_address& other) noexcept = default;
84
85 ip_address(ip_address&& other) noexcept = default;
86 ip_address& operator=(ip_address&& other) noexcept = default;
87
92 NEFORCE_NODISCARD bool is_valid() const noexcept { return !addr_.holds_alternative<none_t>(); }
93
98 NEFORCE_NODISCARD bool is_ipv4() const noexcept { return addr_.holds_alternative<::sockaddr_in>(); }
99
104 NEFORCE_NODISCARD bool is_ipv6() const noexcept { return addr_.holds_alternative<::sockaddr_in6>(); }
105
114 NEFORCE_NODISCARD static ip_address any(ports port = ports::UNDEF, int family = AF_INET) noexcept;
115
122 NEFORCE_NODISCARD static ip_address loopback(ports port = ports::UNDEF, int family = AF_INET) noexcept;
123
128 NEFORCE_NODISCARD const ::sockaddr* data() const noexcept;
129
134 NEFORCE_NODISCARD ::sockaddr* data() noexcept;
135
140 NEFORCE_NODISCARD int size() const noexcept;
141
146 NEFORCE_NODISCARD const address_type& address() const noexcept { return addr_; }
147
152 NEFORCE_NODISCARD int family() const noexcept;
153
158 NEFORCE_NODISCARD ports port() const noexcept;
159
167 NEFORCE_NODISCARD string to_string() const;
168
178 NEFORCE_NODISCARD static optional<ip_address> parse(const string& host, ports port = ports{}) noexcept;
179
187 NEFORCE_NODISCARD bool operator==(const ip_address& other) const;
188
194 NEFORCE_NODISCARD bool operator!=(const ip_address& other) const { return !(*this == other); }
195};
196 // NetworkUtil
198 // Network
200
201NEFORCE_END_NAMESPACE__
202#endif // NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
IP地址封装类
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地址
可选值类
可字符串化接口
可选值类型
网络端口定义和转换工具
可字符串化接口
空状态类型
网络端口封装类
@ UNDEF
未定义/无效端口
变体类型主模板
变体类型实现