为什么此代码从不发现Bonjour实例(mDNS)?

时间:2018-10-20 23:23:22

标签: bonjour mdns

我几乎直接从dns-sd SDK示例中获取了此代码,但找不到我要搜索的服务。

没有错误,只是没有调用任何回调。这与Windows 10 x32上的Apple Bonjour SDK链接。

如果我运行“ dns-sd -B _http._tcp”,它将发现许多实例!

void DNSSD_API IterateServiceInstances(DNSServiceRef       sdRef,
                                   DNSServiceFlags     flags,
                                   uint32_t            interfaceIndex,
                                   DNSServiceErrorType errorCode,
                                   const char        * serviceName,
                                   const char        * regtype,
                                   const char        * replyDomain,
                                   void              * context)
{
  puts("IterateServiceInstances is never called!");
}

void DiscoverSegments()
{
  printf("Discovering Segments...");
  DNSServiceRef client = NULL;
  DNSServiceErrorType err;
  err = DNSServiceBrowse(&client,
                        0,
                        0,
                        "_http._tcp",
                        "",
                        IterateServiceInstances,
                        NULL);
  if (kDNSServiceErr_NoError != err)
    printf("Error: Unable to enumerate Bonjour to find devices.\n");    

int main(int argc, char ** argv)
{
    DiscoverSegments();
}

1 个答案:

答案 0 :(得分:0)

因为您的套接字消息循环必须跟踪所有套接字句柄(客户端服务引用)并在打开时将其全部泵出...