在章节“使用套接字和流 https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Articles/UsingSocketsandSocketStreams.html“ 的 ”网络编程主题概念指南 https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NetworkingTopics/Introduction/Introduction.html#//apple_ref/doc/uid/TP40012546-SW1”,苹果说:
Note:POSIX 网络不会激活 iOS 上的蜂窝无线电。
因此,通常不鼓励使用 POSIX 网络 API
iOS。
也在章节“网络技巧和陷阱 https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/CommonPitfalls/CommonPitfalls.html#//apple_ref/doc/uid/TP40010220-CH4-SW20“ 的 ”网络概述指南 https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010220-CH12-BBCFIHFH”,苹果说:
在iOS中,直接使用POSIX函数或CFSocket来使用套接字
不会自动激活设备的蜂窝调制解调器或按需激活
VPN。
好的,所以在 iOS 上既不应该使用 POSIX 套接字,也不应该使用 CFSocket,后者只是 POSIX 套接字的一个薄包装,它通过 RunLoops 支持异步网络。没问题。但是,如果您需要一个 API,您应该使用什么 API?UDP套接字?
Apple 在本章中进一步说道“网络技巧和陷阱 https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/CommonPitfalls/CommonPitfalls.html#//apple_ref/doc/uid/TP40010220-CH4-SW20“ 的 ”网络概述指南 https://developer.apple.com/library/mac/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Introduction/Introduction.html#//apple_ref/doc/uid/TP40010220-CH12-BBCFIHFH":
在连接到主机之前避免解析 DNS 名称
因此,理想情况下应该有一个用于管理 UDP 套接字的 API,而不是 POSIX API 和 CFSocket,它接受 DNS 名称而不是 IP 地址作为目标地址。
也许我是瞎子,但我找不到任何这样的 API。有任何想法吗?
使用任何第三方API(不是来自Apple)并不有趣,因为这样的API必须基于Apple API,在这种情况下我可以直接使用这个Apple API。围绕 POSIX 套接字编写我自己的包装器 API 是小菜一碟,我之前编写过很多套接字包装器,我已经知道所有令人讨厌的陷阱。但我不会使用 POSIX API,这是这里最初的问题。