Skip to content

Commit f87b44f

Browse files
authored
fix(ipv6): Support IPv6 (#552)
1 parent ce499ab commit f87b44f

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

Sources/AlgoliaSearch-Client/Network.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,23 @@ internal class URLSessionLogger: NSObject, URLSession {
9696

9797
init(session: URLSession) {
9898
self.session = session
99+
if #available(iOS 9, OSX 10.11, *) {
100+
var zeroAddress6: sockaddr_in6 = sockaddr_in6()
101+
zeroAddress6.sin6_len = UInt8(MemoryLayout.size(ofValue: zeroAddress6))
102+
zeroAddress6.sin6_family = sa_family_t(AF_INET6)
103+
defaultRouteReachability = withUnsafePointer(to: &zeroAddress6) {
104+
let zeroAddressAsSockaddr = UnsafePointer<sockaddr>(OpaquePointer($0))
105+
return SCNetworkReachabilityCreateWithAddress(nil, zeroAddressAsSockaddr)!
106+
}
107+
} else {
99108
var zeroAddress: sockaddr_in = sockaddr_in()
100109
zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
101110
zeroAddress.sin_family = sa_family_t(AF_INET)
102111
defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
103112
let zeroAddressAsSockaddr = UnsafePointer<sockaddr>(OpaquePointer($0))
104113
return SCNetworkReachabilityCreateWithAddress(nil, zeroAddressAsSockaddr)!
105114
}
115+
}
106116

107117
// Reset the (global) epoch for logging.
108118
URLSessionLogger.epoch = Date()

Sources/AlgoliaSearch-Client/NetworkReachability.swift

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,21 @@ class SystemNetworkReachability: NetworkReachability {
5151

5252
init() {
5353
// Create reachability handle to an all-zeroes address.
54+
if #available(iOS 9, OSX 10.11, tvOS 9, *) {
55+
var zeroAddress6 = SystemNetworkReachability.zeroAddress6
56+
reachability = withUnsafePointer(to: &zeroAddress6) {
57+
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
58+
SCNetworkReachabilityCreateWithAddress(nil, $0)
59+
}
60+
}!
61+
} else {
5462
var zeroAddress = SystemNetworkReachability.zeroAddress
5563
reachability = withUnsafePointer(to: &zeroAddress) {
56-
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
57-
SCNetworkReachabilityCreateWithAddress(nil, $0)
58-
}
59-
}!
64+
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
65+
SCNetworkReachabilityCreateWithAddress(nil, $0)
66+
}
67+
}!
68+
}
6069
}
6170

6271
/// Test if network connectivity is currently available.
@@ -83,6 +92,14 @@ class SystemNetworkReachability: NetworkReachability {
8392
address.sin_family = sa_family_t(AF_INET)
8493
return address
8594
}()
95+
96+
/// An all zeroes IP address.
97+
static let zeroAddress6: sockaddr_in6 = {
98+
var address = sockaddr_in6()
99+
address.sin6_len = UInt8(MemoryLayout<sockaddr_in6>.size)
100+
address.sin6_family = sa_family_t(AF_INET6)
101+
return address
102+
}()
86103
}
87104

88105
#endif // !os(watchOS)

0 commit comments

Comments
 (0)