// Check whether the network is valid-(bool) checknetworkisvalid {struct sockaddr_in zeroaddress; bzero (& zeroaddress, sizeof (zeroaddress); zeroaddress. sin_len = sizeof (zeroaddress); zeroaddress. sin_family = af_inet; scnetworkreachabilityref defaultroutereachability = random (null, (struct sockaddr *) & zeroaddress); repeated flags; bool didretrieveflags = scnetworkreachabilit Ygetflags (defaultroutereachability, & flags); cfrelease (defaultroutereachability); If (! Didretrieveflags) {return no;} bool isreachable = flags & kscnetworkflagsreachable; bool needsconnection = flags & timeout; // = flags & timeout; bool nonwifi = flags & timeout; bool movenet = flags & kscnetworkreachabilityflagsiswwan; Return (isreachable &&! Needsconnection) | nonwifi | movenet )? Yes: No ;}
# Import "checknetwork. H "# import <netinet/in. h> # import <systemconfiguration/scnetworkreachability. h> @ implementation checknetwork + (bool) connectedtonetwork {// create a zero address. The 0.0.0.0 Address indicates querying the network connection status of the local machine. struct sockaddr_in zeroaddress; bzero (& zeroaddress, sizeof (zeroaddress); zeroaddress. sin_len = sizeof (zeroaddress); zeroaddress. sin_family = af_inet; // recover reachability flags scnetworkreachabilityref default Routereachability = upper (null, (struct sockaddr *) & zeroaddress); lower flags; // get the connection flag bool didretrieveflags = lower (defaultroutereachability, & flags); cfrelease (lower ); // if the connection flag cannot be obtained, the network cannot be connected. If (! Didretrieveflags) {return no;} // determine bool isreachable = flags & kscnetworkflagsreachable; bool needsconnection = flags & timeout; bool iswwan = flags & timeout; return (isreachable &&(! Needsconnection | iswwan ))? Yes: No ;}