1 Poco::Net::IPAddress
地点最大长度,IPv4 是 in_addr 的长度, IPv6 是 in6_addr 的长度
enum { MAX_ADDRESS_LENGTH = #if defined(POCO_HAVE_IPv6) sizeof(struct in6_addr) #else sizeof(struct in_addr) #endif /// Maximum length in bytes of a socket address. };
1.1 IPv4 or IPv6?
POCO 用一个列举类来暗示:
enum Family /// Possible address families for IP addresses. { IPv4, IPv6 };
1.2 结构函数
返回一个全 0 的 IP 地点:
IPAddress();
拷贝结构函数:
IPAddress(const IPAddress& addr);
按照 IP 范例(IPv4 或 IPv6)建设一个全 0 的 IP 地点:
explicit IPAddress(Family family);
用字符串类 型的 IPv4 地点或 IPv6 地点来建设一个 IP 地点,个中 IPv4 是十进制暗示的 ,IPv6 是十六进制暗示的:
explicit IPAddress(const std::string& addr);
用字符串范例的 IP 地点和指定的范例(IPv4 或 IPv6)建设一个 IP 地点,个中 IPv4 是十进制暗示的,IPv6 是十六进制表 示的:
IPAddress(const std::string& addr, Family family);
用原生 IP 地点 in_addr 或 in6_addr 数据布局和给定的字符 串长度,建设一个 IPAddress:
IPAddress(const void* addr, poco_socklen_t length);
用原生 IP 地点 in_addr 或 in6_addr 数据 布局和给定的字符串长度,建设一个 IPAddress,个中 scope 参数用于 IPv6, IPv4 会忽略这个参数:
IPAddress(const void* addr, poco_socklen_t length, Poco::UInt32 scope);
1.3 重载运算符
赋值运算符:
IPAddress& operator = (const IPAddress& addr);
比 较运算符
bool operator == (const IPAddress& addr) const; bool operator != (const IPAddress& addr) const; bool operator < (const IPAddress& addr) const; bool operator <= (const IPAddress& addr) const; bool operator > (const IPAddress& addr) const; bool operator >= (const IPAddress& addr) const;
1.4 常 用操纵
swap:
void swap(IPAddress& address);
获 取地点范例:
Family family() const;
IPv6 专用函数,返回 scope identifier,假如是 IPv4 则返回 0:
Poco::UInt32 scope() const;
toString,IPv4 则显示“d.d.d.d”,IPv6 则
std::string toString() const; poco_socklen_t length() const; const void* addr() const; int af() const; void mask(const IPAddress& mask); void mask(const IPAddress& mask, const IPAddress& set); static IPAddress parse(const std::string& addr); static bool tryParse(const std::string& addr, IPAddress& result); static IPAddress wildcard(Family family = IPv4); static IPAddress broadcast();
1.5 IS 函数
1.5.1 是否是未初始 化状态
是否是未初始化的全零状态(wildcard):
bool isWildcard() const;
1.5.2 是否是广播/组播/单播
是否是广播 地点(全零),与 wildcard 的区别是 wildcard 是未颠末初始化的。只有 IPv4 有广播地点,IPv6 则返回 false。
bool isBroadcast() const;
是否是回环地点:
对付 IPv4 是 127.0.0.1
对付 IPv6 是::1
函数原型:
bool isLoopback() const;
是否是多播:
对付 IPv4 是224.0.0.0到 239.255.255.255范畴;
对付 IPv6 是FFxx:x:x:x:x:x:x:x的范畴:
函数原型:
bool isMulticast() const;
是否是单播:
bool isUnicast() const;
1.5.2 其他函数
bool isLinkLocal() const; bool isSiteLocal() const; bool isIPv4Compatible() const; bool isIPv4Mapped() const; bool isWellKnownMC() const; bool isNodeLocalMC() const; bool isLinkLocalMC() const; bool isSiteLocalMC() const; bool isOrgLocalMC() const; bool isGlobalMC() const;
1.5 protected 函数
protected:
void init(IPAddressImpl* pImpl);
来 自柳大的CSDN博客:Blog.CSDN.net/Poechant
查察全套文章:http://www.bianceng.cn/Programming/cplus/201301/35022.htm