Перечисление доменов
DNSServiceEnumerateDomains
функция находит домены, рекомендующиеся для регистрации и просмотра. Каждый раз, когда Ваш обратный вызов вызывают, информация об одном домене предоставлена, вместе с флагами, указывающими, добавить ли или удалить домен из Вашего списка доменов или указав, что домен является доменом по умолчанию или больше не является доменом по умолчанию.
Параметры для вызова DNSServiceEnumerateDomains
состойте из следующего:
Неинициализированная ссылка открытия службы
Флаг, указывающий, хотите ли Вы перечислить рекомендуемый регистрационные домены или просмотр
Интерфейсный индекс, указывающий интерфейс для перечисления; передача
0
перечислить домены во всех интерфейсах или положительном целом числе для указания интерфейса, в котором можно перечислить домены (используютif_nametoindex
семья вызовов для получения индекса интерфейса Вы хотите перечислить),Функция обратного вызова, которую нужно вызвать для предоставления информации об успешности или неуспешности перечисления
Определяемое пользователем значение контекста, которое будет передано функции обратного вызова, когда это вызовут, или
NULL
Если перечисление может быть запущено, DNSServiceEnumerateDomains
инициализирует ссылку открытия службы и создает сокет, использующийся для передачи с mDNSResponder
демон. Используйте ссылку открытия службы на вызов DNSServiceRefSockFD
и получите дескриптор сокета для сокета.
Установите цикл выполнения или a select
цикл с помощью дескриптора сокета. Когда цикл указывает что ответ от mDNSResponder
демон доступен, вызвать DNSServiceProcessResult
и передайте ему ссылку открытия службы, инициализированную DNSServiceEnumerateDomains
. DNSServiceProcessResult
вызовет функцию обратного вызова, связанную со ссылкой открытия службы.
Вместо того, чтобы настроить выполнение или select
цикл, можно вызвать DNSServiceEnumerate
и сразу вызовите DNSServiceProcessResult
. DNSServiceProcessResult
функция блокирует до mDNSResponder
у демона есть ответ, при котором времени обратный вызов указал когда DNSServiceEnumerate
был вызван будет вызван.
Ваш обратный вызов вызовут со следующими параметрами:
Ссылка открытия службы, переданная
DNSServiceEnumerateDomains
Флаги, указывающие, вызовут ли Ваш обратный вызов снова сразу для передачи информации о другом домене, найденном, добавить ли или удалить этот домен из списка, который приложение ведет, и добавить ли или удалить домен как домен по умолчанию
Индекс интерфейса, в котором был найден домен
Код ошибки, указывающий, было ли перечисление успешно; если перечисление было успешно, другие параметры содержат допустимые данные
Имя найденного домена
Определяемая пользователем контекстная информация, переданная
DNSServiceEnumerateDomains
Цикл выполнения или select
цикл будет уведомлен для каждого рекомендуемого домена, перечисленного на основе на интерфейс и каждый раз, когда домен добавлен или удален. Вы ответственны за сборку ответов демона в список текущих рекомендуемых доменов.
Для завершения перечисления удалите дескриптор сокета из цикла выполнения или select
цикл и вызов DNSServiceRefDeallocate
, передача ему ссылка открытия службы, инициализированная когда DNSServiceEnumerateDomains
был вызван. Ссылка открытия службы лишена законной силы, и память, связанная со ссылкой, освобождена. Сокет, лежащий в основе соединения с mDNSResponder
демон закрывается, таким образом завершая соединение Вашего приложения с демоном.