OGeek|极客世界-中国程序员成长平台

标题: ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 14:28
标题: ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败

我使用以下代码在 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。两次打开套接字的调用都成功(readOpenwriteOpen 为真)。我找不到任何关于为什么这可能会失败的文档。这段代码没有按预期工作的原因可能是什么?



Best Answer-推荐答案


流可能在后台打开,在这种情况下,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