gpt4 book ai didi

ios - 什么设置 NSStreamNetworkServiceTypeBackground "do under the hood"?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:45:31 25 4
gpt4 key购买 nike

我有一个内部应用程序(不适用于 iPhone 商店分发,因此不受 Apple 批准)需要在运行时绑定(bind)一些 TCP 和 UDP 套接字。

在测试时,我注意到我绑定(bind)的套接字有一些奇怪的行为——只要设备进入休眠状态,它就会关闭。例如,当您按下手机顶部的电源按钮时,就会发生这种情况,而我真的不希望它这样做。更不用说这似乎严重违反了 BSD 套接字 API 契约(Contract)。

套接字代码全部用 C 编写,因此没有使用 Objective-C nsstream图书馆。

我注意到有多种方法可以让 VOIP、音乐流和其他事物的套接字保持打开状态。 nsstream 文档本身列出了一个 NSStreamNetworkServiceTypeBackground 属性,这似乎可以帮助我的应用程序在手机进入休眠状态时保持其套接字打开。苹果文档的底部列出了以下属性:

Constants

NSStreamNetworkServiceTypeVoIP
Specifies that the stream is providing VoIP service.

NSStreamNetworkServiceTypeVideo
Specifies that the stream is providing video service.

NSStreamNetworkServiceTypeBackground
Specifies that the stream is providing a background service.

NSStreamNetworkServiceTypeVoice
Specifies that the stream is providing voice service.

但是由于我的应用程序的网络代码没有使用 Objective-C API,我需要知道:上述常量是如何实现的?也许有一个未记录的套接字选项可用于实现相同的结果?基本上我只需要告诉内核在设备休眠时不要弄乱我的套接字。

编辑:作为逆向工程内核调用的替代方案,也许有一种方法可以将我的套接字文件描述符传递给可以应用这些选项的 Objective-C 代码?

最佳答案

如果您使用 CFStream 进行网络连接,您可以这样做:

NSInputStream *inputStream = (__bridge_transfer NSInputStream *)readStream;
NSOutputStream *outputStream = (__bridge_transfer NSOutputStream *)writeStream;

之后,您可以使用已经在 ObjC NSInputStreamNSOutputStream 中找到的常量。 (NSInputStreamNSOutputStream 都扩展了 NSStream。)

关于ios - 什么设置 NSStreamNetworkServiceTypeBackground "do under the hood"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com