Closed santa0000 closed 8 years ago
@santa0000 你好,我看了下源码,QNResolver 里
const char *p = inet_ntop(AF_INET, ns_rr_rdata(rr), buf, 32);
val = [NSString stringWithUTF8String:p];
应该是不管什么环境只请求 ipv4 地址,我用官方提供的测试方法用Mac建立NAT64 Wi-Fi下测得到的都是ipv4 地址,请问你是怎么测试的,可以得到 ipv6 地址 ?
ios9.2以上,得到的是v6地址,9.2以下得到的是v4
qn_localIp最后面几行的inet_ntop,是这样写的
if (family == AF_INET6) { addr = &((struct sockaddr_in6 )&localAddress)->sin6_addr; } else { addr = &((struct sockaddr_in )&localAddress)->sin_addr; } const char *ip = inet_ntop(family, addr, buf, buf_size);
你们的bufsize好像等于32,所以v6下,ip就等于空了,你看下
@santa0000 我不是七牛这个库的维护者,是对这个库是否真的完全支持ipv6 有疑问,在请求localip 的方法里表面上看确实有判断ipv6 的情况。我贴的代码段是QNResolver 里的方法
- (NSArray *)query:(QNDomain *)domain networkInfo:(QNNetworkInfo *)netInfo error:(NSError *__autoreleasing *)error
中的。因为写死 AF_INET 所以每次用 QNResolver 去请求IP 拿回来的都是 ipv4 地址,即使是在Mac的模拟nat64 环境中。
不知道是不是这回事?如果是的话感觉有点怪
并且这个方法名字就叫
static NSArray *query_ip_v4(res_state res, const char *host)
但并没有对应的 v6 版本
@dopcn 这个本来是有v6版本,为了保持兼容性 后来就去掉了,因为返回真v6地址,上层库要做 适配IP为 http://[ipv6]:port/path 这样的处理,为了保持一致,在调用层来做。
fixed in #30
加上之前的freeaddrinfo崩溃,连续两个明显错误,不知道你们有没有在真正的ipv6环境下测试过的