AFNetworking在swift中对IP地址的可达性 - 总是匹配一般可达性?

Chr*_*rle 5 ios afnetworking swift afnetworking-3

我需要帮助理解为什么我会看到以下内容.

AFNetworking 3.0.4 在iOS9.x上

如果我抓住可达性管理器

AFNetworkReachabilityManager.sharedManager()
Run Code Online (Sandbox Code Playgroud)

然后添加一个setReachabilityStatusChangeBlock然后我得到我期望的.

  • 飞行模式: NotReachable
  • WiFi关闭: ReachableViaWWAN
  • WiFi上: ReachableViaWiFi

所以 - 一般情况都是按预期工作.

但我想更准确一点 - 我们知道我们正在谈论什么IP地址,所以我想managerForAddress改用它.这是我从网上购买的代码(大多数示例都是obj-c而不是swift) - 在下面 - ip是地址的字符串(点四方形式):

let isLittleEndian = Int(OSHostByteOrder()) == OSLittleEndian

let htons  = isLittleEndian ? _OSSwapInt16 : { $0 }

var address = sockaddr_in()
address.sin_len = UInt8(sizeofValue(address))
address.sin_family = sa_family_t(AF_INET)
address.sin_port = htons(443);
address.sin_addr.s_addr = inet_addr(ip);

addressReachability = withUnsafePointer(&address) {
    AFNetworkReachabilityManager(forAddress: UnsafePointer($0))
}
Run Code Online (Sandbox Code Playgroud)

然后,我可以将setReachabilityStatusChangeBlock添加到此管理器并开始监视.

现在 - 我发送的IP并不重要 - 空字符串,443正在侦听的有效IP地址,443未侦听的有效IP地址,无效的IP地址 - 结果与sharedManager的结果完全匹配- 如果我在wifi上 - 那就是ReachableViaWiFi,如果我只使用4G那么它就是ReachableViaWWAN,如果我处于飞行模式的话NotReachable.

所以 - 要么我完全误解了如何managerForAddress使用,要么我有一个代码错误:)在任何一种情况下,我都喜欢听到我误解/出错的地方.