DNSServiceBrowse перечисляет один и тот же сервис дважды, с другим interfaceIndex

Я регистрирую услугу 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);

мой функция обратного вызова называется дважды, с тем же serviceName, regType а также replyDomain, только interfaceIndex отличается, это первый раз 20во второй раз 10000010, if_indextoname() возвращается ethernet_12 для обоих.

В то же время, Bonjour Browser (инструмент, который я нашел в Интернете) показывает, что мой сервис указан только один раз.

Я вызываю DNSServiceBrowse с неправильными параметрами?

1

Решение

Я нашел проблему в моем случае.

Проблема началась после установки VMware. Он создал несколько виртуальных сетевых интерфейсов. После отключения этих интерфейсов браузер показал только один результат.

Но я думаю, что проблема не связана с просмотром. Я думаю, что проблема с флагом kDNSServiceInterfaceIndexAny (0 — третий параметр) отправить в функцию DNSServiceBrowse возможно, вам нужно установить фиксированное значение интерфейса вместо 0.

1

Другие решения

Я обнаружил, что есть инструмент командной строки под названием 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, перечисляет сервис дважды, я думаю, это нормальное поведение.

0

По вопросам рекламы [email protected]