<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>I solved the problem myself...</div><div><br></div>I have registered my service in the "Client Registering" state and then the&nbsp;avahi_service_browser_new call does not fail in assertion.<div><br></div><div>It is a little bit strange and I don't understand it but now it works...</div><div>Can somebody explain this?</div><div><br></div><div>Correct working version:</div><div><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ create a Avahi client (with flag AVAHI_CLIENT_NO_FAIL)<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ create a service browser for _printer._tcp<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ get browser callbacks for printers found<br></div></blockquote><br><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ restart avahi daemon<br></div></blockquote><br><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ upon connection lost client callback free the client and create a new Avahi client<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ upon client in state AVAHI_CLIENT_S_<b>REGISTERING</b>: I create a new service browser for _printer._tcp.&nbsp;<br></div></blockquote></div><div><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ get browser callbacks for printers found<br></div></blockquote></div><div><div><br></div></div><div>Version that runs into assertion:</div><div><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ create a Avahi client (with flag AVAHI_CLIENT_NO_FAIL)<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ create a service browser for _printer._tcp</div></blockquote><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ get browser callback&nbsp;for printers found</div></blockquote><br><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ restart avahi daemon<br></div></blockquote><br><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ upon connection lost client callback free the client and create a new Avahi client<br><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ upon client in state AVAHI_CLIENT_S_RUNNING: I create a new service browser for _printer._tcp.</div></blockquote><blockquote type="cite"><div><span class="Apple-tab-span" style="white-space: pre; ">        </span>+ then I get a assertion "AvahiTest: browser.c:583: avahi_service_browser_new: Assertion `client' failed."<br></div></blockquote></div><div><br></div><div><br></div><div>E-J<br><div><br><div><div>Op 12 mei 2011, om 22:04 heeft E-J van der Linden het volgende geschreven:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>My test is according to this:<br><br><span class="Apple-tab-span" style="white-space:pre">        </span>+ create a Avahi client (with flag AVAHI_CLIENT_NO_FAIL)<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ create a service browser<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ get browser callback<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ restart avahi daemon<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ upon connection lost client callback free the client and create a new Avahi client<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ upon client in state AVAHI_CLIENT_S_RUNNING: I create a new service browser.<br><span class="Apple-tab-span" style="white-space:pre">        </span>+ then I get a assertion "AvahiTest: browser.c:583: avahi_service_browser_new: Assertion `client' failed."<br><br>Could somebody tell me how I register for new services after the daemon was down and coming up again?<br><br>Here are the details:<br><br>I create a client<br><br> &nbsp;glib_poll <span class="Apple-tab-span" style="white-space:pre">        </span>= avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>// Create the GLIB Adaptor<br> &nbsp;poll_api <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>= avahi_glib_poll_get (glib_poll);<br><br> &nbsp;// Create a new AvahiClient instance<br> &nbsp;gClient = avahi_client_new (<span class="Apple-tab-span" style="white-space:pre">        </span>poll_api, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>AVAHI_CLIENT_NO_FAIL,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>avahi_client_callback,<span class="Apple-tab-span" style="white-space:pre">        </span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>NULL, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>&amp;error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><br><br>** Message: Avahi Client State Change: 2<br>** Message: Client running; connected to the Avahi Daemon<br><br><br>Then I create a service browser<br><br><span class="Apple-tab-span" style="white-space:pre">        </span>gSb = avahi_service_browser_new(gClient, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_printer._tcp", NULL, 0, browse_callback, gClient );<br><br><br>Now I get browse callbacks for services of type _printer._tcp which I can resolve.<br><br><br>Now I restart the avahi daemon and I get client callbacks from the different states:<br><br>** Message: Avahi Client State Change: 100<br>** Message: Disconnected from the Avahi Daemon: Daemon connection failed<br>** Message: Avahi Client State Change: 101<br>** Message: Client is connecting to the Avahi Daemon<br>** Message: Avahi Client State Change: 1<br>** Message: Client registering<br>** Message: Avahi Client State Change: 2<br>** Message: Client running; connected to the Avahi Daemon<br><br>I release the client upon disconnection and then I start a new one.<br><br> glib_poll <span class="Apple-tab-span" style="white-space:pre">        </span>= avahi_glib_poll_new (NULL, G_PRIORITY_DEFAULT);<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>// Create the GLIB Adaptor<br> &nbsp;poll_api <span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>= avahi_glib_poll_get (glib_poll);<br><br> &nbsp;// Create a new AvahiClient instance<br> &nbsp;gClient = avahi_client_new (<span class="Apple-tab-span" style="white-space:pre">        </span>poll_api, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>AVAHI_CLIENT_NO_FAIL,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>avahi_client_callback,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>NULL, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>&amp;error); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span><br><br><br>When the client is again in state AVAHI_CLIENT_S_RUNNING, I start a new browser for the _printer._tcp service when we are connected to the daemon<br>Then I get the following assertion:<br><br>AvahiTest: browser.c:583: avahi_service_browser_new: Assertion `client' failed.<br><br>This is my client callback:<br><br><span class="Apple-tab-span" style="white-space:pre">        </span>switch (state) {<br><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>case AVAHI_CLIENT_FAILURE:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Disconnected from the Avahi Daemon: %s", avahi_strerror(avahi_client_errno(client)));<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>avahi_client_free (gClient);<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>lResult = AvahiLibStartClient();<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>break;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>case AVAHI_CLIENT_CONNECTING:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Client is connecting to the Avahi Daemon");<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>break;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<br><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>case AVAHI_CLIENT_S_RUNNING:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Client running; connected to the Avahi Daemon");<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>gSb = avahi_service_browser_new(gClient, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_printer._tcp", NULL, 0, browse_callback, gClient );<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>break;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>case AVAHI_CLIENT_S_REGISTERING:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Client registering");<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>break;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>case AVAHI_CLIENT_S_COLLISION:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Client collision");<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>break;<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>default:<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>{<br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span> &nbsp;<span class="Apple-tab-span" style="white-space:pre">        </span>g_message ("Client to an undefined state?");<span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>// no action<span class="Apple-tab-span" style="white-space:pre">        </span><br><span class="Apple-tab-span" style="white-space:pre">        </span><span class="Apple-tab-span" style="white-space:pre">        </span>}<br><span class="Apple-tab-span" style="white-space:pre">        </span>}<br><br><br></div></blockquote></div><br></div></div></body></html>