2014-07-17 87 views
2

我想使用CFHostGetAddressing做一个简单的DNS查找。但是,我注意到它返回了一个sockaddr结构体的数组,我猜这意味着它只能执行IPV4。CFHostGetAddressing()是否支持ipv6 DNS条目?

有没有办法在iOS中支持IPV6地址的DNS条目?也许一个类似的API返回一个sockaddr_storage结构数组?

回答

2

CFHostGetAddressing()文档可能会引起误解,因为struct sockaddr 是一种涵盖各种套接字地址(IPv4,IPv6,...)的所有常见元素的结构。它通常只用于将通用指针传递给套接字函数。

实际上CFHostGetAddressing()与IPv6协同工作良好。它返回一个CFData元素的数组,其中每个元素包含一个struct sockaddr_instruct 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() 
}