【问题标题】:How to do a CNAME record lookup in swift如何在 swift 中进行 CNAME 记录查找
【发布时间】:2018-03-02 22:17:43
【问题描述】:

我在网上找到了一些 example code,我正在尝试使用它来进行 CNAME 记录查找(请注意,我传递了一个我想要运行的 callback 块):

DNSServiceQueryRecord(serviceRef, 0, 0, domainName, UInt16(kDNSServiceType_CNAME), UInt16(kDNSServiceClass_IN), callback, &mutableCompletionHandler);
DNSServiceProcessResult(serviceRef.pointee)

问题是这段代码在DNSServiceProcessResult(serviceRef.pointee) 处被阻塞,而callback 永远不会被调用。根据 Apple 的 DNSServiceProcessResult 文档,我需要

使用DNSServiceRefSockFD 与运行循环或 select() 结合使用来确定是否存在来自服务器的响应,然后再调用此函数来处理响应而不阻塞。

所以我查看了DNSServiceRefSockFD,发现我可以用DNSServiceRefSockFD(serviceRef.pointee) 创建一个dnssd_sock_t。但是现在我有了套接字,我不确定如何“将它与运行循环一起使用”作为运行循环的事件源(根据DNSServiceRefSockFD 文档)。

我只是不明白这是如何工作的。我不明白如何使用dnsssd_sock_t 作为运行循环的事件源,以便我可以在正确的时间调用DNSServiceProcessResult 而不会阻塞,这样我的callback 就会真正运行。

如果最好将套接字用作 kqueue 事件源或在 select() 循环中使用(如文档所述),我可以接受,但我也不知道该怎么做。

CoreFoundation 可能非常神秘,因此非常感谢任何帮助!

如果有更好的方法来进行 CNAME 记录查找,那么请务必分享!

【问题讨论】:

    标签: swift core-foundation dns-sd


    【解决方案1】:

    https://gist.github.com/fikeminkel/a9c4bc4d0348527e8df3690e242038d3 上查看我的 (ethan-gerardot) cmets

    第一段回答了如何在不阻塞的情况下调用回调。

    【讨论】:

      猜你喜欢
      • 2017-03-17
      • 2018-05-15
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-02
      • 2020-06-27
      相关资源
      最近更新 更多