【问题标题】:POSIX networking does not activate the cellular radio?POSIX 网络不激活蜂窝无线电?
【发布时间】:2014-09-21 20:35:34
【问题描述】:

我正在阅读Networking Programming Topics:Using Sockets and Socket Streams,有一段告诉我们不要在 iOS 上使用 POSIX 套接字 API,它说:

在 iOS 中,不鼓励使用 POSIX 网络,因为它不会激活 蜂窝无线电或按需 VPN。因此,作为一般规则,您 应该将网络代码与任何常见的数据处理分开 功能并使用更高级别的 API 重写网络代码。

如文档所述,如果我使用 POSIX 套接字来完成我的网络工作,那么它不会激活蜂窝无线电。我想过如果我的设备没有连接WIFI,我的应用程序将无法访问互联网,但我通过编写下面的代码来否定它。

在示例中,我仅使用 POSIX 套接字 API 并连接到 google 的 DNS 服务器,当我的 iPhone 连接到蜂窝无线电(没有 WIFI)时它成功。

int clientSocket = socket(AF_INET, SOCK_STREAM, 0) ;
struct sockaddr_in server_addr ;
bzero(&server_addr, sizeof(server_addr)) ;
server_addr.sin_port = htons(53) ;
server_addr.sin_addr.s_addr = inet_addr("8.8.8.8") ;
server_addr.sin_family = AF_INET ;

int i = connect(clientSocket, (const struct sockaddr *)&server_addr, sizeof(server_addr)) ;
if (i >= 0) {
    NSLog(@"connected") ;
}
close(clientSocket) ;

现在我的问题是“激活蜂窝无线电”是什么意思以及系统何时停用蜂窝无线电

提前致谢。

【问题讨论】:

  • 蜂窝无线电是数据通信,如 2G、3G、4G 等。
  • 你应该用谷歌搜索一下。
  • @rckoenes 正如文档所述,如果我使用 POSIX 套接字来完成我的网络工作,它不会激活蜂窝无线电,这是否意味着如果我的设备没有与 WIFI 连接,我的应用程序将不会可以上网吗?
  • 是的,如果我理解正确的话\。
  • @duci9y 我相信 google 比在这里提问更方便。在问之前我已经用谷歌搜索了。

标签: ios iphone sockets networking


【解决方案1】:

According to "Quinn the Eskimo", an employee from Apple Developer Relations:

从历史上看,BSD 套接字无法激活 WWAN 是一个主要问题 gotcha,这就是为什么文档中到处都是对 它。然而,在现代系统上,WWAN 网络几乎 由各种系统服务固定(最显着的是推送 通知)。

他说还有其他理由使用CFSocketStream 或其他非 POSIX API:

  • BSD Sockets 没有按名称连接机制,因此您需要手动解析名称(使用getaddrinfo),然后连接到每个返回的地址,直到找到一个有效的地址。
  • 您必须支持 IPv6,即使您正在与之通信的服务器仅支持 IPv4(因为 DNS64/NAT64)。
  • 为了与 DNS64/NAT64 兼容,您不应使用特殊情况的 IP 地址。如果您有 IP 地址,请将其呈现为字符串并将其传递给 getaddrinfo
  • 您应该实施 Happy Eyeballs。
  • 请注意,我要强调的是,Happy Eyeballs 不会像 Apple API 使用的内置按名称连接机制那样工作。不过,这可能已经足够了。
  • 有关内置按名称连接机制在传统 Happy Eyeballs 算法之外的作用的信息,请查看RFC 8305
  • 您将不兼容某些功能,例如 VPN On Demand。

其中只有最后一个是 Apple 特定的;一切都是您使用古老的 BSD Sockets API 所付出的代价。

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2017-11-23
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多