- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个内部应用程序(不适用于 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 NSInputStream
和 NSOutputStream
中找到的常量。 (NSInputStream
和 NSOutputStream
都扩展了 NSStream
。)
关于ios - 什么设置 NSStreamNetworkServiceTypeBackground "do under the hood"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10220329/
我是 Python 的新手,在理解如何str(123) 或 int('123') 函数有效。 我试图检查 builtins.py,但其中有一些我无法理解的函数和方法。都是关于二进制转换的吗? 作为一个
你们都知道将依赖项放入 pom.xml 文件并运行“mvn clean install”的过程。当此命令运行时,依赖项的 jar 文件将下载到 .m2 存储库。 当我们使用 IntelliJ 和运行/
当我们使用锁对象时会发生什么?我知道运行时使用了 monitor.Enter 和 Exit 方法。但幕后到底发生了什么?为什么只有引用类型用于锁定?实现加锁的对象虽然变了,为什么还能保证线程安全? 在
共享首选项作为键值对存储在 xml 文件中。这是事实。我还没有找到关于击球手的任何文档,但是......当试图找到并加载某个键的值时,它实际上是如何在 xml 中查找键的?它是将整个 xml 文件加载
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我了解在 MATLAB 等语言中使用矢量化如何通过消除维护循环变量的开销来加速代码,但矢量化实际上是如何在汇编/机器代码中发生的?我的意思是在某处仍然必须有一个循环,对吧? 最佳答案 Matlab 的
我想知道银行交易是如何运作的。很难找到一些至少可以接受的解释。我不是指一些不那么严肃的企业的基本分布式事务算法。 那么银行应该采取什么样的措施来保持一致性,做到一分钱不漏。 国际交易,银行之间的交易呢
我还在学习 C++。我试图以相当循序渐进的方式了解评估是如何进行的。所以使用这个简单的例子,一个表达式语句: 整数 x = 8 * 5 - 5; 这就是我相信发生的事情。请告诉我我离标准还有多远: 操
我有一个内部应用程序(不适用于 iPhone 商店分发,因此不受 Apple 批准)需要在运行时绑定(bind)一些 TCP 和 UDP 套接字。 在测试时,我注意到我绑定(bind)的套接字有一些奇
我不熟悉错误/异常处理。当异常被捕获 和抛出 时,“幕后”发生了什么? 即在 try-catch block 中捕获异常然后抛出它有什么意义? 例如: try { //Stuff
读完这个问题:What are the problems of a zero-terminated string that length-prefixed strings overcome?我开始怀疑
我已经在我的博客中下载并应用了 red hood 模板(Red Hood)。但是我发现 slider 不会随计时器自动滑动。这是 Red hood slider 代码..
这是 make-counter 过程和对它的调用 (define make-counter (let ((glob 0)) (lambda () (le
.NET、Java 和其他各种语言的高级数据库 API 通常提供称为准备语句和参数绑定(bind)的技术,而不是向数据库服务器发送纯文本命令。我想知道的是当您执行这样的语句时会发生什么: SqlCom
像这样一个简单的程序: int main(void) { char p; char *q; q = &p; return 0; } &p是如何确定的?编译器是预先计算所
我想知道关于 Unix(特别是 Linux)上的 C++ 多线程“幕后”发生了什么——特别是操作系统和信号量等的参与。 我已经进行了初步的谷歌搜索,但没有出现异常。 有人可以描述或指出可以提供帮助的好
我希望有人能帮助我理解为什么下面的代码会生成下面的输出。代码来自 Simon Marlow 书中的并发章节(链接如下)。 根据对各种功能的描述,我假设第二个 putMVar鉴于 (i) 两个 putM
perl 中的基本类型与大多数语言不同,类型为标量、数组、哈希(但显然不是子例程,&,我猜这实际上只是带有语法糖的标量引用)。最奇怪的是,最常见的数据类型:int、boolean、char、strin
刚刚开始将 Hood.ie 用于网络应用程序,但是在获取一些数据时遇到问题。 我想获取数据,然后简单地执行类似的操作 hoodie.store.find('teammember', theId).fi
来自 React Native 文档: XMLHttpRequest API is implemented on-top of iOS networking apis. 另外(来自Github iss
我是一名优秀的程序员,十分优秀!