CFHostGetAddressing()是否支持ipv6的DNS条目?
我正在尝试使用CFHostGetAddressing做一个简单的DNS查找。 但是,我注意到它返回了一个sockaddr结构体的数组,我猜这意味着它只能做IPV4。
有没有办法在iOS中支持IPV6地址的DNS条目? 也许一个类似的API返回一个sockaddr_storage结构数组?
CFHostGetAddressing()
文档可能会引起误解,因为struct sockaddr
是一个涵盖各种套接字地址(IPv4,IPv6,…)的所有常见元素的结构。 它通常只用于传递一个通用指针给套接字函数。
其实CFHostGetAddressing()
与IPv6 CFHostGetAddressing()
工作。 它返回一个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() }