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