I have an app that uses Apples reachability code. When I tab out of the app, turn on airplane mode, go back into the app, I correctly get a message that says no connection is available. If I go back out turn OFF airplane mode and go back into the app, I STILL get the message that no connection is available. The specific problem code is this:
NetworkStatus status = kNotReachable;
if (SCNetworkReachabilityGetFlags(reachabilityRef, &flags))
{
status = [self networkStatusForFlags: flags];
return status;
}
I get inside the if statement and flags ends up being 0 (kSCNetworkReachabilityFlagsTransientConnection
). What does that mean exactly? Has anyone experienced this and does anyone know a work-around or fix? Been playing with it for hours...
I have found that this is caused by supplying a hostname with a protocol specifier (such as http://hostname
instead of just hostname
). Try specifying just the hostname by itself to see if this fixes your problem.
After you call SCNetworkReachabilityGetFlags it is important also to call CFRelease to avoid caching the network status. See my implementation below:
SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
SCNetworkReachabilityFlags flags;
success = SCNetworkReachabilityGetFlags(reachability, &flags);
bool isAvailable = success && (flags & kSCNetworkFlagsReachable) &&
!(flags & kSCNetworkFlagsConnectionRequired);
CFRelease(reachability);
if (isAvailable) {
NSLog(@"Host is reachable: %d", flags);
return true;
}else{
NSLog(@"Host is unreachable");
return false;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With