我使用以下代码在 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 为真)。我找不到任何关于为什么这可能会失败的文档。这段代码没有按预期工作的原因可能是什么?
Best Answer-推荐答案 strong>
流可能在后台打开,在这种情况下,CFWriteStreamOpen 将始终返回 true,并且流的状态将为 kCFStreamStatusOpening 。只有在流成功打开后,才能获得 native 套接字。您可以使用 CFWriteStreamScheduleWithRunLoop 来监听打开完成事件。
关于ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/28775890/
|