macでipv6環境を作成して、iosでsockaddr_inを利用しても動作してしまう
ipv6検証をするためにios Developer CenterのTest for IPv6 DNS64/NAT64 Compatibility Regularlyを参考にipv6環境をmacに作りました。
Qiitaでも同様のやり方が書かれていました。
そして、以下のコードで検証しようとしました。
Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
以下が該当のReachabilityのソースです。
+(instancetype)reachabilityForInternetConnection {
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}
+(instancetype)reachabilityWithAddress:(void *)hostAddress {
SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*)hostAddress);
if (ref)
{
id reachability = [[self alloc] initWithReachabilityRef:ref];
return reachability;
}
return nil;
}
sockaddr_inはipv4用なので動作しないはずと考えていましたが、ios9.3.1で動作させたところ、普通に動作してしまいました。
(参考までにAFNetworkingのipv6対応を見ると sockaddr_in6
に変えていていました。)
なぜ動作してしまうのか、教えていただけると幸いです。