gpt4 book ai didi

ios - CFHostGetAddressing() 是否支持 ipv6 DNS 条目?

转载 作者:可可西里 更新时间:2023-11-01 01:06:50 28 4
gpt4 key购买 nike

我正在尝试使用 CFHostGetAddressing 进行简单的 DNS 查找。但是,我注意到它返回一个 sockaddr 结构数组,我猜这意味着它只能执行 IPV4。

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

最佳答案

CFHostGetAddressing() 文档可能具有误导性,因为 struct sockaddr是一个涵盖各种套接字地址(IPv4、IPv6 等)的所有公共(public)元素的结构。它通常仅用于将通用指针 传递给套接字函数。

实际上 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()
}

关于ios - CFHostGetAddressing() 是否支持 ipv6 DNS 条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24796142/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com