Подтвердить что ты не робот

Достижимость и IPv6

В одном из моих проектов используется класс Apple Reachability, чтобы отслеживать состояние сети и получать уведомления в случае изменений.

После прочтения этой статьи о поддержке IPv6 мне было интересно, нужно ли было сделать этот класс, чтобы он работал с IPv6.

Я установил сеть IPv6 после той же статьи, и все работает нормально, но, возможно, проблема с настройкой.

Является ли частью класса Reachability проверки подключения к Интернету, работающего с IPv6, как сейчас, или ему нужны какие-то изменения?

4b9b3361

Ответ 1

Короткий ответ от самой Apple (https://developer.apple.com/videos/play/wwdc2015/719/ в ~ 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/):

Просто попробуйте соединение.

Скопируйте пасту из https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW25, которая повторяет это:

Подключить без предполета

API-интерфейсы Reachability (см. ссылку SCNetworkReachability Reference): предназначенные для диагностических целей после идентификации подключения вопрос. Многие приложения неправильно используют эти API для проактивного контроля подключение к Интернету, позвонив Метод SCNetworkReachabilityCreateWithAddress и передача его IPv4 адрес 0.0.0.0, что указывает на наличие маршрутизатора на сеть. Однако наличие маршрутизатора не гарантирует, что Интернет-соединение существует. В общем, избегайте предполетной сети достижимости. Просто попробуйте установить соединение и изящно обработать неудачи. Если вы должны проверить наличие сети, избегайте вызова метод SCNetworkReachabilityCreateWithAddress. Позвоните Метод SCNetworkReachabilityCreateWithName и передать ему имя хоста вместо этого.

Некоторые приложения также передают метод SCNetworkReachabilityCreateWithAddress адрес IPv4 169.254.0.0, самонастраиваемый локальный адрес ссылки, проверьте наличие активного Wi-Fi-соединения. Для проверки Wi-Fi или сотовой связи подключения, найдите флаг доступности сети Вместо этого kSCNetworkReachabilityFlagsIsWWAN.

Ответ 2

У меня также есть аналогичные сомнения относительно класса IPv6 и Reachability. Apple попросила в своих документах предоставить поддержку типов IPv6, также как и (struct in_addr6, AF_INET6, struct sockaddr_in6 etc), но класс, похоже, еще не обновлен, чтобы иметь эти типы. Это сомнение в том, что у меня есть. Мне еще предстоит попробовать тесты IPv6, но только что наблюдаемые при выполнении статических проверок кода. Некоторые изменения могут потребоваться.

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];
}