如何在 swift 中进行 CNAME 记录查找
How to do a CNAME record lookup in swift
我在网上找到了一些 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 文档,我需要
Use DNSServiceRefSockFD
in conjunction with a run loop or select() to determine the presence of a response from the server before calling this function to process the reply without blocking.
所以我查看了 DNSServiceRefSockFD
,发现我可以用 DNSServiceRefSockFD(serviceRef.pointee)
创建一个 dnssd_sock_t
。但是现在我有了套接字,我不确定如何将 "use it in conjunction with a run loop" 作为 运行 循环的事件源(根据 DNSServiceRefSockFD 文档)。
我只是不明白这是怎么回事。我不明白如何使用 dnsssd_sock_t
作为 运行 循环的事件源,以便我可以在正确的时间调用 DNSServiceProcessResult
而不会阻塞,这样我的 callback
实际上 运行.
如果将套接字用作 kqueue 事件源或在 select() 循环中(如文档所述)更好,我可以接受,但我不知道如何也可以这样做。
CoreFoundation 可能非常神秘,因此非常感谢您的帮助!
如果有更好的 CNAME 记录查找方法,请务必分享!
查看我的 (ethan-gerardot) 对 https://gist.github.com/fikeminkel/a9c4bc4d0348527e8df3690e242038d3
的评论
第一段回答了如何在不阻塞的情况下调用回调。
我在网上找到了一些 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 文档,我需要
Use
DNSServiceRefSockFD
in conjunction with a run loop or select() to determine the presence of a response from the server before calling this function to process the reply without blocking.
所以我查看了 DNSServiceRefSockFD
,发现我可以用 DNSServiceRefSockFD(serviceRef.pointee)
创建一个 dnssd_sock_t
。但是现在我有了套接字,我不确定如何将 "use it in conjunction with a run loop" 作为 运行 循环的事件源(根据 DNSServiceRefSockFD 文档)。
我只是不明白这是怎么回事。我不明白如何使用 dnsssd_sock_t
作为 运行 循环的事件源,以便我可以在正确的时间调用 DNSServiceProcessResult
而不会阻塞,这样我的 callback
实际上 运行.
如果将套接字用作 kqueue 事件源或在 select() 循环中(如文档所述)更好,我可以接受,但我不知道如何也可以这样做。
CoreFoundation 可能非常神秘,因此非常感谢您的帮助!
如果有更好的 CNAME 记录查找方法,请务必分享!
查看我的 (ethan-gerardot) 对 https://gist.github.com/fikeminkel/a9c4bc4d0348527e8df3690e242038d3
的评论第一段回答了如何在不阻塞的情况下调用回调。