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
48class NEFORCE_API ip_address : public istringify<ip_address> {
49public:
51
52private:
53 address_type addr_;
54
55public:
61 ip_address() noexcept = default;
62
67 explicit ip_address(const ::sockaddr_in& addr4) noexcept :
68 addr_(addr4) {}
69
74 explicit ip_address(const ::sockaddr_in6& addr6) noexcept :
75 addr_(addr6) {}
76
77 ip_address(const ip_address& other) noexcept = default;
78 ip_address& operator=(const ip_address& other) noexcept = default;
79
80 ip_address(ip_address&& other) noexcept = default;
81 ip_address& operator=(ip_address&& other) noexcept = default;
82
87 NEFORCE_NODISCARD bool is_valid() const noexcept { return !addr_.holds_alternative<none_t>(); }
88
93 NEFORCE_NODISCARD bool is_ipv4() const noexcept { return addr_.holds_alternative<::sockaddr_in>(); }
94
99 NEFORCE_NODISCARD bool is_ipv6() const noexcept { return addr_.holds_alternative<::sockaddr_in6>(); }
100
109 NEFORCE_NODISCARD static ip_address any(ports port = ports::UNDEF, int family = AF_INET) noexcept;
110
117 NEFORCE_NODISCARD static ip_address loopback(ports port = ports::UNDEF, int family = AF_INET) noexcept;
118
123 NEFORCE_NODISCARD const ::sockaddr* data() const noexcept;
124
129 NEFORCE_NODISCARD ::sockaddr* data() noexcept;
130
135 NEFORCE_NODISCARD int size() const noexcept;
136
141 NEFORCE_NODISCARD const address_type& address() const noexcept { return addr_; }
142
147 NEFORCE_NODISCARD int family() const noexcept;
148
153 NEFORCE_NODISCARD ports port() const noexcept;
154
162 NEFORCE_NODISCARD string to_string() const;
163
173 NEFORCE_NODISCARD static optional<ip_address> parse(const string& host, ports port = ports{}) noexcept;
174
182 NEFORCE_NODISCARD bool operator==(const ip_address& other) const;
183
189 NEFORCE_NODISCARD bool operator!=(const ip_address& other) const { return !(*this == other); }
190};
191 // NetworkUtil
193
194NEFORCE_END_NAMESPACE__
195#endif // NEFORCE_NETWORK_UTIL_IP_ADDRESS_HPP__
IP地址封装类
const address_type & address() const noexcept
获取内部地址存储的常量引用
variant< none_t, ::sockaddr_in, ::sockaddr_in6 > address_type
地址存储类型
bool is_ipv4() const noexcept
检查是否为IPv4地址
string to_string() const
转换为字符串表示
const ::sockaddr * data() const noexcept
获取底层指针
ports port() const noexcept
获取端口号
static ip_address any(ports port=ports::UNDEF, int family=AF_INET) noexcept
获取通配地址
bool operator==(const ip_address &other) const
相等比较运算符
int size() const noexcept
获取地址结构大小
int family() const noexcept
获取地址族
bool is_valid() const noexcept
检查地址是否有效
ip_address() noexcept=default
默认构造函数
bool operator!=(const ip_address &other) const
不等比较运算符
static optional< ip_address > parse(const string &host, ports port=ports{}) noexcept
从字符串解析IP地址
bool is_ipv6() const noexcept
检查是否为IPv6地址
ip_address(const ::sockaddr_in6 &addr6) noexcept
从IPv6地址构造
static ip_address loopback(ports port=ports::UNDEF, int family=AF_INET) noexcept
获取回环地址
可选值类
可字符串化接口
可选值类型
网络端口定义和转换工具
可字符串化接口
空状态类型
网络端口封装类
@ UNDEF
未定义/无效端口
变体类型主模板
变体类型实现