Mac OS X / iOS の場合、Bonjour API(NSNetService and CFNetService) が用意されているのでそれを使うのが一番簡単だが、例えば特定のネットワークインターフェイスだけに限定したいといった細やかな設定ができない(らしい)。DNS Service Discovery API (dns_sd.h) を使うとそういった細やかな制御ができる。このサンプルでは DNS-SD API を使い、Bonjour Service の登録、ブラウズ、サービス解決を行う。サンプルは Mac OS X 10.7 用だが、コア部分(サービス登録・ブラウズ・名前解決のクラス)は iOS 5 でも利用できる。
サンプルの実行はコマンドラインから。こんな感じ。
$ build/Debug/DNSSDObjects -r _foo._tcp 12345 : $ build/Debug/DNSSDObjects -b _foo._tcp : $ build/Debug/DNSSDObjects -l 'Bruno' '_foo._tcp' 'local.'
サンプルを実用的に利用する指針として挙げられていた項目:
operating on a specific interface enabling support for Bluetooth browsing on iOS 5.0 and later (kDNSServiceFlagsIncludeP2P) supporting TXT records monitoring record changes discovering browsable domains, and browsing within those domains resolving to IP addresses registering or querying for arbitrary DNS records shared connections (kDNSServiceFlagsShareConnection)