可达性和IPv6

我的一个项目使用苹果的Reachability类来监控networking状态,并在变化的情况下得到通知。

在阅读了关于支持IPv6的这篇文章之后,我想知道是否要让这个课程能够使用IPv6。

我在同一篇文章中设置了一个IPv6networking,一切似乎都正常,但是可能是设置有问题。

Reachability类是检查互联网连接与IPv6一起工作的部分,还是需要进行一些更改?

苹果自己的简短回答( https://developer.apple.com/videos/play/wwdc2015/719/于10:30),尽pipe我会推荐观看video,或者至less看看关键点这里: http : //www.internetsociety.org/deploy360/blog/2015/06/video-of-apple-wwdc-session-about-ipv6-and-ios-9-now-available-and-some-screenshots/ ):

试试连接。

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortfortheIPv6Transition/UnderstandingandPreparingfortfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW25复制粘贴,其中重申:

无预检连接

可达性API(请参阅SCNetworkReachability参考)用于识别连接问题之后的诊断目的。 许多应用程序错误地使用这些API来主动检查Internet连接,方法是调用SCNetworkReachabilityCreateWithAddress方法并将0.0.0.0的IPv4地址传递给networking,这表明networking上有路由器。 但是,路由器的存在并不能保证存在Internet连接。 通常,避免预检networking可达性。 只要尝试build立连接并妥善处理失败。 如果您必须检查networking可用性,请避免调用SCNetworkReachabilityCreateWithAddress方法。 调用SCNetworkReachabilityCreateWithName方法并将其传递给主机名。

某些应用程序还会将SCNetworkReachabilityCreateWithAddress方法传递给IPv4地址169.254.0.0(一个自分配的链接本地地址),以检查活动的Wi-Fi连接。 要检查Wi-Fi或蜂窝连接,请查找networking可达性标记kSCNetworkReachabilityFlagsIsWWAN。

我对IPv6和Reachability类也有类似的疑问。 苹果已经在他们的文档中要求提供IPv6types的支持,比如(struct in_addr6, AF_INET6, struct sockaddr_in6 etc)但是这个类似乎还没有更新到这些types。 这是我所怀疑的。 我还没有尝试IPv6testing,只是在进行静态代码检查时才观察到。 可能需要一些更改。

Reachability.m

 + (instancetype)reachabilityForInternetConnection { struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; return [self reachabilityWithAddress:&zeroAddress]; }