首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >POSIX网络不激活蜂窝无线电?

POSIX网络不激活蜂窝无线电?
EN

Stack Overflow用户
提问于 2014-07-30 09:07:36
回答 2查看 1.2K关注 0票数 4

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

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

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

在这个例子中,我只使用POSIX套接字api并连接到谷歌的DNS服务器,当我的iPhone连接到蜂窝无线电(没有WIFI)时,它就成功了。

代码语言:javascript
复制
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) ;

现在我的问题是,它的意思是“激活蜂窝无线电”,以及系统什么时候将关闭蜂窝无线电

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-01-05 13:35:43

对于C中的TCP网络,苹果似乎建议使用CFStream。见参考文件/doc/uid/CH73 73-SW4

票数 0
EN

Stack Overflow用户

发布于 2020-11-13 15:59:15

据“爱斯基摩人奎因”(Quinn the Eskimo)称,他是苹果开发者关系部的一名员工。

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

他说,使用CFSocketStream或其他非POSIX API还有其他原因:

  • BSD套接字没有按名连接的机制,所以您需要手动解析名称(使用getaddrinfo),然后连接到每个返回的地址,直到找到一个工作的地址。
  • 您必须支持IPv6,即使您正在交谈的服务器仅为IPv4 4(因为DNS64 64/NAT64)。
  • 为了与DNS64 64/NAT64兼容,您不应该使用特殊的IP地址。如果有IP地址,则将其呈现为字符串并将其传递给getaddrinfo
  • 你应该实现快乐眼球。
  • 请注意,我要强调的是,“快乐眼球”不会像苹果的API所使用的内置按名连接机制那样起作用。不过,这可能已经足够了。
  • 要了解内置的按名连接机制在传统的快乐眼球算法之外的作用,请查看RFC 8305
  • 您将无法与某些特性兼容,如按需VPN。

其中只有最后一个是特定于苹果的;一切都是你使用古老的所付出的代价。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25032809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档