我有一个内部应用程序(不适用于iPhone商店分发,因此不受苹果批准),需要在运行时保持少量TCP和UDP套接字绑定。
在测试过程中,我注意到我的绑定套接字存在一些奇怪的行为-每当设备进入睡眠状态时,它就会关闭。例如,当您按下手机顶部的电源按钮时,这种情况就会发生,而我真的不希望它发生。更不用说这似乎是对BSD套接字API合同的严重违反。
套接字代码全部使用C编写,因此未使用Objective-C nsstream库。
我注意到有各种方法可以保持套接字开放,例如VOIP、音乐流等。 nsstream文档本身列出了一个NSStreamNetworkServiceTypeBackground
属性,似乎可以帮助我的应用程序在手机进入睡眠状态时保持套接字开放。苹果文档底部列出了以下属性:
常量
NSStreamNetworkServiceTypeVoIP
指定流提供VoIP服务。
NSStreamNetworkServiceTypeVideo
指定流提供视频服务。
NSStreamNetworkServiceTypeBackground
指定流提供后台服务。
NSStreamNetworkServiceTypeVoice
指定流提供语音服务。
但由于我的应用程序网络代码没有使用Objective-C API,我需要知道:上述常量是如何实现的?也许有一个未记录的套接字选项可以用来实现相同的结果?基本上,我只需要告诉内核在设备休眠时不要干扰我的套接字。
编辑:作为对内核调用进行反向工程的替代方法,也许有一种方法可以将我的套接字文件描述符传递给Objective-C代码,在那里可以应用这些选项?