2013-11-01 3 views
0

Я построил Qt+Bonjour integration demo из Qt Quarterly, но одна вещь, с которой я не могу обернуть голову, состоит в том, что один вызов DNSServiceProcessResult() вызывает функцию обратного вызова DNSServiceResolveReply дважды.Почему DNSServiceProcessResult вызывает мой обратный вызов дважды?

Следует называть его один раз! То, что я имею в виду, это одна строка:

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

Я нашел эту проблему, это было то, что я проходил 0 для interfaceIndex при вызове DNSServiceResolve.

документы говорят, что:

Если решительность вызов в результате операции в настоящее время активный DNSServiceBrowse(), то interfaceIndex должен быть индекс сообщили в DNSServiceBrowseReply обратного вызова. Если этот вызов разрешения использует ранее сохраненную информацию (например, в файле предпочтений), то используйте interfaceIndex 0, потому что желаемая услуга теперь может быть доступна через другой физический интерфейс.