我使用以下代码在 iOS 应用程序中获取 native 套接字句柄。
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@"example.com", 443, &readStream, &writeStream);
Boolean readOpen = CFReadStreamOpen(readStream);
Boolean writeOpen = CFWriteStreamOpen(writeStream);
CFDataRef socketData = CFWriteStreamCopyProperty(writeStream, kCFStreamPropertySocketNativeHandle);
if (socketData == NULL) {
NSLog(@"Failed to get native socket!"); // Always fails
}
然而,函数CFWriteStreamCopyProperty
的结果总是NULL
。两次打开套接字的调用都成功(readOpen
和 writeOpen
为真)。我找不到任何关于为什么这可能会失败的文档。这段代码没有按预期工作的原因可能是什么?
流可能在后台打开,在这种情况下,CFWriteStreamOpen
将始终返回 true,并且流的状态将为 kCFStreamStatusOpening
。只有在流成功打开后,才能获得 native 套接字。您可以使用 CFWriteStreamScheduleWithRunLoop
来监听打开完成事件。
关于ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28775890/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) | Powered by Discuz! X3.4 |