调用获取CFStream的本机套接字总是在iOS上失败

时间:2015-02-27 23:08:43

标签: ios core-foundation

我使用以下代码在iOS应用程序中获取本机套接字句柄。

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都是真的)。我找不到任何关于为什么会失败的文档。这个代码没有按预期工作的原因是什么?

1 个答案:

答案 0 :(得分:2)

可能会在后台打开流,CFWriteStreamOpen将始终返回true,并且流的状态为kCFStreamStatusOpening。只有在成功打开流后才能获得本机套接字。您可以使用CFWriteStreamScheduleWithRunLoop来监听开放的完整事件。