我为iOS编写了一个网络客户端,它使用SCNetworkReachabilityCreateWithName()
功能来启动对远程主机可用性的监控。如果远程主机只有IPv4地址或只有IPv6地址,则可以很好地工作。
当客户端位于仅IPv4网络上并且正在监视同时具有IPv4地址和IPv6地址的主机时,会出现问题。客户端将监视远程主机的IPv6地址,并指示即使可以访问IPv4地址,主机也不可用。
如果IPv6网络不可用,我已经搜索过并且无法找到指示SCNetworkReachability默认监控IPv4地址的方法。
我可以通过以编程方式确定设备的公共IP地址,手动解析主机名,以及如果存在非链接本地IPv6地址使用IPv4地址来解决此问题,但是我希望有人有一个更简单的解决方案
由于iOS和OS X的功能相同,此问题也会影响OS X客户端。
我的具体实现是我的BKNetworkReachability类的.m和.h文件: https://github.com/bindle/BindleKit/tree/master/BindleKit/controllers