Alcance y IPv6

Uno de mis proyectos utiliza la class Reachability de Apple para monitorear el estado de la networking y ser notificado en caso de cambios.

Después de leer este artículo sobre el soporte de IPv6 me preguntaba si se iban a hacer en esta class para que funcione con IPv6.

Configuré una networking IPv6 siguiendo el mismo artículo y todo parece funcionar bien, pero tal vez haya un problema con la configuration.

¿La parte de la class Reachability está comprobando que la connection a Internet funciona con IPv6 tal como está ahora o necesita algunos cambios?

Respuesta corta de Apple sí mismo ( https://developer.apple.com/videos/play/wwdc2015/719/ a las ~ 10: 30, aunque recomendaría ver el video completo o, al less, ver los puntos key aquí: http://www.internetsociety.org/deploy360/blog/2015/06/video-of-apple-wwdc-session-about-ipv6-and-ios-9-now-available-and- some- screenshots/ ):

Solo testing la connection.

Una copy pegada de https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/UnderstandingandPreparingfortheIPv6Transition/UnderstandingandPreparingfortheIPv6Transition.html#//apple_ref/doc/uid/TP40010220-CH213-SW25 que reitera esto:

Conectar sin verificación previa

Las API de alcanzabilidad (ver Referencia de SCNetworkReachability) están destinadas a fines de diagnóstico después de identificar un problema de conectividad. Muchas aplicaciones utilizan incorrectamente estas API para comprobar proactivamente una connection a Internet llamando al método SCNetworkReachabilityCreateWithAddress y transmitiéndole una dirección IPv4 de 0.0.0.0, lo que indica que hay un enrutador en la networking. Sin embargo, la presencia de un enrutador no garantiza que exista una connection a Internet. En general, evite la accesibilidad de la networking de verificación previa. Simplemente intente establecer una connection y manejar con gracia los fallos. Si debe verificar la disponibilidad de la networking, evite llamar al método SCNetworkReachabilityCreateWithAddress. Llame al método SCNetworkReachabilityCreateWithName y pásele un nombre de host en su lugar.

Algunas aplicaciones también pasan el método SCNetworkReachabilityCreateWithAddress una dirección IPv4 de 169.254.0.0, una dirección local de enlace autoasignada, para verificar si hay una connection Wi-Fi activa. Para verificar la conectividad Wi-Fi o celular, busque el indicador de scope de networking kSCNetworkReachabilityFlagsIsWWAN en su lugar.

También tengo dudas similares con respecto a la class IPv6 y Reachability. Apple ha pedido en sus documentos que proporcionen soporte para types IPv6 también como (struct in_addr6, AF_INET6, struct sockaddr_in6 etc) pero la class parece no estar actualizada aún para tener estos types. Esta es la duda que estoy teniendo. Aún estoy por probar las testings de IPv6, pero solo observé mientras hago las comprobaciones del código estático. Es posible que se requieran algunos cambios.

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