Я построил Демонстрация интеграции Qt + Bonjour из Qt Quarterly, но одна вещь, которую я не могу обернуть вокруг себя, это то, что один звонок DNSServiceProcessResult()
зовет DNSServiceResolveReply
функция обратного вызова дважды.
Стоит позвонить один раз! Что я имею в виду, это одна строка:
DNSServiceErrorType err = DNSServiceProcessResult(dnssref);
Результаты в DNSServiceResolveReply
обратный звонок, который я передал DNSServiceResolve
быть вызванным дважды.
interfaceIndex
отличается — в первый раз это 10000010
во второй раз 20
, но я понятия не имею, что это значит.
Все остальные параметры одинаковы между вызовами (кроме flags
конечно, который kDNSServiceFlagsMoreComing
первый раз и 0
второй).
редактировать
Вот как я называю DNSServiceResolve
функция.
DNSServiceErrorType err = DNSServiceResolve(&dnssref, 0, 0,
record.serviceName.toUtf8().constData(),
record.registeredType.toUtf8().constData(),
record.replyDomain.toUtf8().constData(),
(DNSServiceResolveReply)bonjourResolveReply, this);
Я нашел проблему, это было то, что я проходил 0
для interfaceIndex
при звонке DNSServiceResolve
,
Документы говорят, что:
Если это разрешение вызова
в результате текущей активной операции DNSServiceBrowse (), то
interfaceIndex должен быть индексом, сообщаемым в DNSServiceBrowseReply
Перезвоните. Если для этого решения используется информация, ранее сохраненная
(например, в файле настроек) для дальнейшего использования, затем используйте interfaceIndex 0, потому что
требуемая услуга теперь может быть доступна через другой физический интерфейс.
Других решений пока нет …