ConnectionHelper.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // ConnectionHelper.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 31/03/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import SystemConfiguration
  9. class ConnectionHelper {
  10. class func isConnectedToNetwork() -> Bool {
  11. var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
  12. zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
  13. zeroAddress.sin_family = sa_family_t(AF_INET)
  14. let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
  15. $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
  16. SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
  17. }
  18. }
  19. var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
  20. if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
  21. return false
  22. }
  23. /* Only Working for WIFI
  24. let isReachable = flags == .reachable
  25. let needsConnection = flags == .connectionRequired
  26. return isReachable && !needsConnection
  27. */
  28. // Working for Cellular and WIFI
  29. let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0
  30. let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0
  31. let isConnect = (isReachable && !needsConnection)
  32. return isConnect
  33. }
  34. }