高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1337
Discovering all advertised Rendezvous service types

Q:ネットワーク上にアドバタイズされているすべての Rendezvous サービスを動的に検出することは可能でしょうか。

A:はい。mDNSResponder-58.6(Mac OS X 10.3.4)以降が動作しているデバイスは、DNS-SD 仕様のセクション 10 に規定されている "Service Type Enumeration" メタクエリに応答します。"_services._dns-sd._udp.local." という名前を検索するマルチキャスト DNS PTR レコードクエリを発行すると、ローカルネットワーク上でアドバタイズされているサービスタイプの一覧が返されます。

"_services._dns-sd._udp.local." を検索するクエリは、標準の mDNS クエリの場合と動作が少し異なります。通常の mDNS 長期クエリの場合には、レコードの登録と登録解除に伴って ADD/REMOVE イベントが返されますが、サービスタイプ列挙メタクエリの場合には、サービスの登録が解除されたときの REMOVE イベントは通知されません。それ以外の点では、メタクエリの動作は標準の mDNS クエリと同じです。ネットワークインタフェースが無効になったとき、および、PTR レコードがキャッシュの中で自然に期限切れを迎えたときに、REMOVE イベントが通知されます。

注意: この非標準の動作は、ネットワークトラフィックの軽減に寄与します。ネットワーク上の複数のデバイスは、同じメタクエリ PTR レコードを登録するので、そのいずれか 1 つのデバイスが当該レコードに対応する goodbye パケットを送信したとしたら、当該レコードが削除されないように、1 つ以上のデバイスがパケットに応答する必要があります。メタクエリ PTR レコードについて goodbye パケットが送信されないのは、このためです。goodbye パケットの詳細については、マルチキャスト DNS プロトコル仕様のセクション 13.2 を参照してください。

メタクエリは、「/usr/include/dns_sd.h」に宣言されているソケットベースの DNSServiceDiscovery API の DNSServiceQueryRecord を使用して発行できます。コールバックから、アドバタイズされる DNS-SD サービスごとに、サービスタイプとドメインを格納した DNS PTR レコードが返されます。たとえば、ローカルネットーワーク上で HTTP サービスがアドバタイズされている場合、DNSServiceQueryRecord コールバックからは、"_http._tcp.local." を指す PTR レコードが返されます。

DNSServiceMetaQuery サンプルコードは、サービスタイプ列挙メタクエリの発行方法を示します。

ドキュメントの改訂履歴

日付メモ
2004-06-01最初のバージョン

掲載日: 2004-06-01