2
我想使用CFHostGetAddressing做一個簡單的DNS查找。但是,我注意到它返回了一個sockaddr結構體的數組,我猜這意味着它只能執行IPV4。CFHostGetAddressing()是否支持ipv6 DNS條目?
有沒有辦法在iOS中支持IPV6地址的DNS條目?也許一個類似的API返回一個sockaddr_storage結構數組?
我想使用CFHostGetAddressing做一個簡單的DNS查找。但是,我注意到它返回了一個sockaddr結構體的數組,我猜這意味着它只能執行IPV4。CFHostGetAddressing()是否支持ipv6 DNS條目?
有沒有辦法在iOS中支持IPV6地址的DNS條目?也許一個類似的API返回一個sockaddr_storage結構數組?
CFHostGetAddressing()
文檔可能會引起誤解,因爲struct sockaddr
是一種涵蓋各種套接字地址(IPv4,IPv6,...)的所有常見元素的結構。它通常只用於將通用指針傳遞給套接字函數。
實際上CFHostGetAddressing()
與IPv6協同工作良好。它返回一個CFData
元素的數組,其中每個元素包含一個struct sockaddr_in
或struct sockaddr_in6
。
使用從以前的問題爲出發點的代碼,下面應該工作:
let hostRef = CFHostCreateWithName(kCFAllocatorDefault, "localhost").takeRetainedValue()
var resolved = CFHostStartInfoResolution(hostRef, CFHostInfoType.Addresses, nil)
let addresses = CFHostGetAddressing(hostRef, &resolved).takeRetainedValue() as NSArray
for addr in addresses as [NSData] {
var sockaddr = UnsafePointer<sockaddr_storage>.alloc(1)
addr.getBytes(sockaddr, length: sizeof(sockaddr_storage))
// ...
sockaddr.destroy()
}