SCNetworkReachabilityGetFlags returns 0 even when wireless available

空扰寡人 提交于 2019-11-29 07:42:31

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 the flags were received and they end up being 0, as you've seen, this indicates Airplane Mode is on. However, the results of this check seem to be cached, at least for a short time. Try this: leave your app, turn Airplane Mode off, hit a site in Mobile Safari, then return to your app. This may invalidate the cache.

I had the same problem but it was only happening when i was testing in the simulator. I spent 2 days going crazy and then I tested on the device and it worked as a charm! No idea why...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!