I personally use the following:
typedef enum { NoConnection = 0, WiFiConnected, WWANConnected } NetworkStatus; NetworkStatus getNetworkStatus ( ) { struct sockaddr_in nullAddress; bzero(&nullAddress, sizeof(nullAddress)); nullAddress.sin_len = sizeof(nullAddress); nullAddress.sin_family = AF_INET; SCNetworkReachabilityRef ref = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr*) &nullAddress); SCNetworkReachabilityFlags flags; SCNetworkReachabilityGetFlags(ref, &flags); if (!(flags & kSCNetworkReachabilityFlagsReachable)) return NoConnection; if (!(flags & kSCNetworkReachabilityFlagsConnectionRequired)) return WiFiConnected; if (((flags & kSCNetworkReachabilityFlagsConnectionOnDemand) || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic)) && !(flags & kSCNetworkReachabilityFlagsInterventionRequired)) return WiFiConnected; if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) return WWANConnected; return NoConnection; }
I forget where exactly, but somewhere in the SDK there is an example on which it is based.
EDIT: looks like Nick found him ... :)
source share