BSD套接字在iPhone 3G环境中不起作用

我注意到很多时候在为iPhone 3G开发的时候,BSD套接字函数将会失败。 我当时也注意到,3G天线还没有开,也没有WIFI接入来备份networking通话(所以看起来很可笑,不开启支持networking请求)。这个信息是在苹果的一个应用程序中进行了validation,称为连接testing(Connectivity Test),或者类似的东西。

基本上,如果你加载Safari或其他东西,然后快速加载应用程序将罚款..当然,这并不理想。 显然,苹果,gethostbyname()或类似的东西绝不是打开天线的理由。

我就此联系了苹果公司,他们说BSDfunction不能切换天线,但调用所有的Objective-C CFNetworkfunction。 我想要便携式代码,那么有没有办法保持我现有的BSD设置? 我真的不喜欢在Objective-C中编码,所以如果有人知道一个工作,这将是很棒的。

CFStream套接字添加是Applebuild议您使用的,而不是直接的BSD套接字。 他们特别警告在这里使用BSD套接字:

尽pipeBSD(POSIX)networkingAPI在iPhone OS中可用,但您应该避免使用它们。 如果您直接与套接字进行通信,iPhone OS的某些networkingfunction(例如VPN On Demand)无法正常工作。 改用CFStream Socket Additions提供的API。

请注意,CFNetwork之类的不是Objective-C,而是几乎所有的东西。