我使用以下代码在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
。打开套接字的两次调用都是成功的(readOpen
和writeOpen
都是真的)。我找不到任何关于为什么会失败的文档。这个代码没有按预期工作的原因是什么?
答案 0 :(得分:2)
可能会在后台打开流,CFWriteStreamOpen
将始终返回true,并且流的状态为kCFStreamStatusOpening
。只有在成功打开流后才能获得本机套接字。您可以使用CFWriteStreamScheduleWithRunLoop
来监听开放的完整事件。