DNSServiceBrowse使用不同的interfaceIndex两次列出相同的服务

时间:2013-11-04 17:15:48

标签: c++ bonjour

我使用

注册Bonjour服务
DNSServiceRegister(&dnssref, 0, 0, "Fortune Server on my-PC", "_trollfortune._tcp", 0, 0, bigEndianPort, 0, 0, 0, 0);

然后我使用

浏览它
DNSServiceBrowse(&dnssref, 0, 0, "_trollfortune._tcp", 0, bonjourBrowseReplyCallback, this);

我的callback function被称为两次,具有相同的serviceNameregTypereplyDomain,只有interfaceIndex不同,第一次是20,第二次是10000010if_indextoname()为两者返回ethernet_12

与此同时,Bonjour Browser(我在互联网上找到的工具)显示我的服务仅列出一次。

我是否使用错误的参数调用DNSServiceBrowse?

2 个答案:

答案 0 :(得分:1)

我在案件中发现了问题。

安装VMware后问题就出现了。它创建了一些虚拟网络接口。禁用这些接口后,浏览器只显示一个结果。

但我认为问题与浏览无关。我认为问题是将标志 kDNSServiceInterfaceIndexAny(0 - 3rd parameter)发送给函数 DNSServiceBrowse 可能需要将接口设置为固定值而不是0。 / p>

答案 1 :(得分:0)

我发现有一个名为dns-sd的命令行工具随Bonjour一起提供,你可以用它注册/浏览服务。

我使用

注册了一项服务
dns-sd -R "Fortune Server on my-PC" _trollfortune._tcp local 1234

并使用命令

进行浏览
dns-sd -B _trollfortune._tcp

给我以下输出:

Browsing for _trollfortune._tcp
Timestamp     A/R     Flags if       Domain                    Service Type              Instance Name
19:48:23.674  Add     3     20       local.                    _trollfortune._tcp.       Fortune Server on my-PC
19:48:23.674  Add     2     10000010 local.                    _trollfortune._tcp.       Fortune Server on my-PC

由于Bonjour附带的标准工具列出了两次服务,我想这是正常行为。