Регистрация и завершение службы

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

Регистрация службы

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

Службы, требующие записей TXT также, передают необработанные данные записи TXT и длину необработанных данных как параметры. Большинство служб не нуждается в записях TXT и поэтому передает NULL и 0, соответственно, для этих параметров.

Вместо того, чтобы обеспечить функцию обратного вызова, можно передать NULL, когда, Вы не будете уведомлены относительно значений по умолчанию, которые могут быть выбраны от Вашего имени, и Вы не будете уведомлены относительно никаких асинхронных ошибок, которые могут предотвратить регистрацию Вашей службы. Если Вы передаете NULL для этого параметра Вы не можете передать kDNSServiceFlagsNoAutoRename как флаговый параметр. Можно вычеркнуть из списка службу, регистрирующуюся без функции обратного вызова нормальным способом путем вызова DNSServiceRefDeallocate.

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

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

Вместо того, чтобы настроить цикл выполнения или a select цикл, можно вызвать DNSServiceRegister и сразу вызовите DNSServiceProcessResult. DNSServiceProcessResult функция блокирует до mDNSResponder у демона есть ответ, при котором времени обратный вызов указал когда DNSServiceRegister был вызван (если таковые имеются), будет вызван.

В дополнение к ссылке открытия службы и флагам, в настоящее время не использующимся, Ваш обратный вызов вызовут со следующими параметрами:

Если комбинация имени службы, типа регистрации и доменного имени привела к полному доменному имени, которое уже находится в локальном использовании, и Вы указали kDNSServiceFlagsNoAutoRename, необходимо будет освободить ссылку открытия службы, выбрать другое имя службы и попробовать еще раз, пока локально уникальное имя не может быть зарегистрировано.

После успешной регистрации о Вашей службе объявляют локальной сети, и ее информация о доступе (IP-адрес, порт, и т.д.) может быть найдена с помощью, многоадресно передает DNS, или по имени или путем просмотра для служб. Используя инициализированную ссылку открытия службы, можно связаться с mDNSResponder демон для добавления записи на информацию о регистрации для службы обновите добавленную запись или удалите добавленную запись, в то время как работает служба. Однако Вы никогда не должны будете, вероятно, вносить изменения в свою информацию о регистрации, потому что Добрый день обрабатывает общие падежи, такие как пробуждение, сон, закрытие и изменение IP-адресов.

Редкое исключение было бы потребностью обновить текстовую запись, связанную со службой. Если бы текстовое поле содержит имя очереди, например, и смены имени очереди, необходимо было бы обновить текстовую запись для службы.

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

Завершение регистрации службы

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