magnumrocha
04/08/2020, 8:00 AMpublic func isConnectedToNetwork() -> Bool {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return false
}
var flags: SCNetworkReachabilityFlags = []
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
return false
}
if flags.isEmpty {
return false
}
let isReachable = flags.contains(.reachable)
let needsConnection = flags.contains(.connectionRequired)
return (isReachable && !needsConnection)
}
fcosta
04/10/2020, 1:40 AMmagnumrocha
04/10/2020, 2:45 PMfun isNetworkAvailable(): Boolean {
memScoped {
val zeroAddress = alloc<sockaddr_in>()
zeroAddress.sin_len = sizeOf<sockaddr_in>().toUByte()
zeroAddress.sin_family = AF_INET.toUByte()
val defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(null, zeroAddress.ptr.reinterpret()) ?: return false
var flags = allocArray<SCNetworkReachabilityFlagsVar>(10)
if (!SCNetworkReachabilityGetFlags(defaultRouteReachability, flags)) {
return false
}
val results = (0..9).map { flags[it] }.toTypedArray()
val isReachable = results.contains(kSCNetworkFlagsReachable)
val needsConnection = results.contains(kSCNetworkFlagsConnectionRequired)
return isReachable && !needsConnection
}
}
however, I am not 100% sure about this... I appreciate some validation/help 🙂