Просмотр для сетевых служб

Просмотр для служб с помощью этого API довольно прост. Можно узнать, какие службы данного типа доступны в данном домене с единственным вызовом функции.

Используя DNSServiceBrowse

Для просмотра для доступных служб вызвать DNSServiceBrowse. Параметры для совершения этого звонка состоят из следующего:

Если обзор может быть запущен, DNSServiceBrowse инициализирует ссылку открытия службы и создает сокет, использующийся для передачи с mDNSResponder демон. Используйте ссылку открытия службы на вызов DNSServiceRefSockFD и получите дескриптор сокета для сокета.

Используйте дескриптор сокета для установки цикла выполнения или a select цикл, который укажет когда ответ от mDNSResponder демон становится доступным. Ответ может указать, что экземпляр службы, соответствующий указанный тип, домен и интерфейс, был найден или что ранее найденный экземпляр службы больше не доступен. Когда цикл указывает что mDNSResponder демон ответил, вызвать DNSServiceProcessResult и передайте ему ссылку открытия службы, инициализированную DNSServiceBrowse. DNSServiceProcessResult вызовет функцию обратного вызова, связанную со ссылкой открытия службы.

Ваш обратный вызов вызовут со следующими параметрами:

Просмотр многократных доменов

Просмотреть в многократных доменах, или для многократных типов службы, вызова DNSServiceBrowse для каждого домена и типа службы интереса. Ваше приложение ответственно за отслеживание ответы.

Если Ваше приложение должно оставить интерфейс браузера видимым все время, Ваше приложение работает, как iTunes и iChat делают, то Вы обычно будете вызывать DNSServiceBrowse один раз на сеанс. Каждый раз, когда новая служба становится доступной, или существующая служба становится недоступной, данные отправляются в Вашу функцию обратного вызова, таким образом, можно просто оставить обратный вызов активным, и список служб всегда будет актуален. Эта информация обычно нечасто изменяется, таким образом, обратный вызов обычно не использует много процессорного времени.

Однако, если Вы необходимо вызвать, которых приложение не должно постоянно показывать списку доступных служб, в ситуации, таких как диалоговое окно принтера, тогда DNSServiceBrowse и завершите просмотр, когда Вы будете закончены.

Когда Вы вызываете DNSServiceBrowse, это инициализирует ссылку открытия службы и открывает основанное на сокете соединение с mDNSResponder демон. Поэтому, если Вы принимаете решение деактивировать свой обратный вызов и повторить поиск по мере необходимости, убедиться вызвать DNSServiceRefDeallocate освобождать ссылку перед вызовом DNSServiceBrowse снова. Иначе, Вы пропустите память и сокеты для каждого поиска.

Фактический IP-адрес и порт приведенного примера службы будут изменяться более часто, чем имя службы. Каждый раз, когда Вы используете службу, необходимо разрешить текущий адрес экземпляра службы только до использования службы. Посмотрите следующий раздел, Разрешение Текущего адреса Службы.

Завершение просмотра

Для завершения просмотра удалите дескриптор сокета из цикла выполнения или select цикл и вызов DNSServiceRefDeallocate, передача ему ссылка открытия службы, инициализированная когда DNSServiceBrowse был вызван. Просмотр останавливается, ссылка открытия службы лишена законной силы, и память, связанная со ссылкой, освобождена. Сокет, лежащий в основе соединения с mDNSResponder демон закрывается, таким образом завершая соединение Вашего приложения с демоном.