CFHipsterRef Low-Level Programming on iOS & Mac OS X

Determining Network Reachability Asynchronously

Thankfully, the System Configuration framework provides a set of APIs for monitoring reachability changes asynchronously.

static void ReachabilityCallback( SCNetworkReachabilityRef target, SCNetworkConnectionFlags flags, void *context)
{
    // ...
}
SCNetworkReachabilityContext context = {0, NULL, NULL, NULL, NULL};

SCNetworkReachabilitySetCallback(networkReachability, ReachabilityCallback,
&context));

SCNetworkReachabilityScheduleWithRunLoop(reachability, CFRunLoopGetMain(),
kCFRunLoopCommonModes));