菜鸟教程小白 发表于 2022-12-12 14:28:04

ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败


                                            <p><p>我使用以下代码在 iOS 应用程序中获取 native 套接字句柄。</p>

<pre><code>CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;

CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)@&#34;example.com&#34;, 443, &amp;readStream, &amp;writeStream);

Boolean readOpen = CFReadStreamOpen(readStream);
Boolean writeOpen = CFWriteStreamOpen(writeStream);

CFDataRef socketData = CFWriteStreamCopyProperty(writeStream, kCFStreamPropertySocketNativeHandle);
if (socketData == NULL) {
    NSLog(@&#34;Failed to get native socket!&#34;); // Always fails
}
</code></pre>

<p>然而,函数<code>CFWriteStreamCopyProperty</code>的结果总是<code>NULL</code>。两次打开套接字的调用都成功(<code>readOpen</code> 和 <code>writeOpen</code> 为真)。我找不到任何关于为什么这可能会失败的文档。这段代码没有按预期工作的原因可能是什么?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>流可能在后台打开,在这种情况下,<code>CFWriteStreamOpen</code> 将始终返回 true,并且流的状态将为 <code>kCFStreamStatusOpening</code>。只有在流成功打开后,才能获得 native 套接字。您可以使用 <code>CFWriteStreamScheduleWithRunLoop</code> 来监听打开完成事件。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28775890/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28775890/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 调用以获取 CFStream 的 native 套接字在 iOS 上总是失败