私のプロジェクトの1つは、ネットワークの状態を監視し、変更があった場合に通知を受けるために、AppleのReachabilityクラスを使用しています。
この記事 IPv6のサポートについて読んだ後、IPv6で動作させるためにこのクラスを作成する必要があるかどうか疑問に思いました。
同じ記事 に従ってIPv6ネットワークをセットアップしましたが、すべて正常に動作しているようですが、セットアップに問題がある可能性があります。
インターネット接続をチェックするReachabilityクラスの一部は、現在のようにIPv6で動作していますか、それとも変更が必要ですか?
Apple自体( https://developer.Apple.com/videos/play/wwdc2015/719/ at〜10:30)からの短い回答-ビデオを完全に見ることをお勧めしますが-または少なくともここで重要なポイントを確認してください: http://www.internetsociety.org/deploy360/blog/2015/06/video- of-Apple-wwdc-session-about-ipv6-and-ios-9-now-available-and-some-screenshots / ):
接続を試してください。
プリフライトなしで接続
Reachability API(SCNetworkReachabilityリファレンスを参照)は、接続の問題を特定した後の診断を目的としています。多くのアプリは、これらのAPIを誤って使用して、SCNetworkReachabilityCreateWithAddressメソッドを呼び出し、ネットワーク上にルーターがあることを示す0.0.0.0のIPv4アドレスを渡すことにより、インターネット接続を事前にチェックします。ただし、ルーターが存在しても、インターネット接続が存在することを保証するものではありません。一般に、プリフライトネットワークの到達可能性は避けてください。接続を確立して、障害を適切に処理してみてください。ネットワークの可用性を確認する必要がある場合は、SCNetworkReachabilityCreateWithAddressメソッドを呼び出さないでください。 SCNetworkReachabilityCreateWithNameメソッドを呼び出し、代わりにホスト名を渡します。
一部のアプリは、SCNetworkReachabilityCreateWithAddressメソッドに169.254.0.0のIPv4アドレス(自己割り当てのリンクローカルアドレス)を渡して、アクティブなWi-Fi接続を確認します。 Wi-Fiまたはセルラー接続を確認するには、代わりにネットワーク到達可能性フラグkSCNetworkReachabilityFlagsIsWWANを探します。
IPv6と到達可能性クラスについても同様の疑問があります。 Appleはドキュメントで(struct in_addr6, AF_INET6, struct sockaddr_in6 etc)
のようなIPv6タイプのサポートを提供するように求めていますが、クラスはまだ更新されていないようです。これは私が持っている疑いです。 。私はまだIPv6テストを試していませんが、静的コードチェックを行っているときに観察されました。いくつかの変更が必要になる場合があります。
+ (instancetype)reachabilityForInternetConnection
{
struct sockaddr_in zeroAddress;
bzero(&zeroAddress, sizeof(zeroAddress));
zeroAddress.sin_len = sizeof(zeroAddress);
zeroAddress.sin_family = AF_INET;
return [self reachabilityWithAddress:&zeroAddress];
}