lil*_*ood 3 c networking network-programming ipv6 getaddrinfo
我正在寻找一个以 IPv6 地址作为参数并返回域名的函数。
明确地说,2a00:1450:8006::68 返回 ipv6.google.com。
(目的是将该域名提供给 getaddrinfo 函数。)
谢谢 :-)
edit1:我已经尝试过getaddrinfo("2a00:1450:8006::68", "http", NULL, &result);,它返回“不支持主机名的地址系列”并getaddrinfo("ipv6.google.com", "http", NULL, &result);返回错误“没有地址与热名关联”。
EDIT2:我同意你的观点,我的 IPV6 系统有问题,我尝试过http://test-ipv6.com/,看来我没有 IPV6 地址,但ifconfig它返回:
adr inet6: fe80::15b:fcff:fe65:d516/64 Scope:Lien
Run Code Online (Sandbox Code Playgroud)
我认为您没有有效的 IPv6 配置。getaddrinfo()只会返回可到达的 IPv6 答案,因此,如果您的系统没有具有全局范围的 IPv6 地址以及到已解析地址的路由,则结果将从结果集中删除。
基本思想是,您调用getaddrinfo一次并获取要连接的地址列表 - 如果该列表包含无法访问的地址,则程序在尝试另一个地址之前必须先遇到超时。
“不支持主机名的地址族”意味着它已识别出该地址是不需要通过 DNS 解析的 IPv6 地址,因此它尝试将其与允许的地址族列表进行匹配,失败并返回错误。
解析主机名会尝试获取主机名的“A”记录,因为这适用于本地支持的唯一地址族。不存在这样的记录,因此返回不存在记录的信息。由于它从未要求过 IPv6 地址(这毫无意义),因此它不会抱怨此处的地址族不匹配。