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
何か案は?考え?提案?