2

Bonjour の dns-sd API を使用してクライアントを構築しています。1 つの DNSServiceRef の接続を共有するために使用される kDNSServiceFlagsShareConnection というフラグがあることに気付きました。

アップルのサイトによると

効率のために、多くの同時操作を実行するクライアントは、独立した操作ごとに個別の接続を使用するのではなく、バックグラウンド デーモンとの単一の Unix ドメイン ソケット接続を使用することができます。このモードを使用するには、クライアントはまず DNSServiceCreateConnection(&MainRef) を呼び出して、メインの DNSServiceRef を初期化します。同じ接続を共有する後続の操作ごとに、クライアントは MainRef をコピーし、そのコピーのアドレスを渡し、ShareConnection フラグを設定して、この DNSServiceRef が典型的な初期化されていない DNSServiceRef ではないことをライブラリに伝えます。これは、接続情報を再利用する必要がある既存の DNSServiceRef のコピーです。

フラグの使用方法を示す例もあります。私が抱えている問題は、プログラムを実行すると、フラグを使用して関数を呼び出すたびに何かを待っているようにとどまることです。コードは次のとおりです。

DNSServiceErrorType error;
DNSServiceRef MainRef, BrowseRef;

error = DNSServiceCreateConnection(&MainRef);
BrowseRef = MainRef;
//I'm omitting when I check for errors

error = DNSServiceBrowse(&MainRef, kDNSServiceFlagsShareConnection, 0, "_http._tcp", "local", browse_reply, NULL); 
// After this call the program stays waiting for I don't know what

//I'm omitting when I check for errors
error = DNSServiceBrowse(&BrowseRef, kDNSServiceFlagsShareConnection, 0, "_http._tcp", "local", browse_reply, NULL);
//I'm omitting when i check for errors
DNSServiceRefDeallocate(BrowseRef); // Terminate the browse operation
DNSServiceRefDeallocate(MainRef); // Terminate the shared connection

何か案は?考え?提案?

4

3 に答える 3

0

残念ながら、閲覧および解決のためのサービス参照は共有されない場合があります。-flagについては、 Bonjourドキュメントのコメントを参照してください。kDNSServiceFlagsShareConnectionあなたは2回しか閲覧しないので、代わりに別々のservice-refを持たせます。

したがって、両方ともDNSServiceBrowse()DNSServiceResolve()最初のパラメータとして未割り当てのservice-refが必要です。

しかし、なぜあなたのプログラムが窒息するのか説明できません。例の最初のDNSServiceBrowse()呼び出しは、エラーコードとともにすぐに返されるはずです。

于 2011-03-30T13:36:19.380 に答える
0

古い質問ですが、今答えを探している人に役立つはずです。

vidtige による回答は正しくありません。引数とともに「kDNSServiceFlagsShareConnection」フラグを渡せば、任意の操作で共有される可能性があります。以下のサンプル -

    m_dnsrefsearch = m_dnsservice;
    DNSServiceErrorType mdnserr = DNSServiceBrowse(&m_dnsrefsearch,kDNSServiceFlagsShareConnection,0,
        "_workstation._tcp",NULL,
        DNSServiceBrowseReplyCallback,NULL);

参照 - http://osxr.org/android/source/external/mdnsresponder/mDNSShared/dns_sd.h#0267

于 2015-07-01T05:59:35.177 に答える