[avahi] Published service still browseable in other machines even if network it's down

Trent Lloyd lathiat at bur.st
Wed Nov 4 22:15:10 PST 2009


Hi Jose,

On 05/11/2009, at 6:35 AM, José Félix Ontañón wrote:

> Hi everyone!
>
> I'm a newbie playing with python-avahi trying to code some kind of  
> master-slave application for shutdown every machine at same time.
> When the master it's ordered to shutdown, it sends the signal to the  
> slaves. The slaves publish/unpublish the service via avahi, and the  
> master
> discover them via ItemNew/ItemRemove signals. Very strait-forward,  
> isn't?
>
> The avahi publish/unpublish/discover services it's gorgeous but i've  
> found that if a slave, that has published the service via avahi,  
> losts it
> network (i.e. the wifi ap goes out of power), the master still  
> discovering it! and no ItemRemove signal it's raised at all. Is it  
> normal? Am i doing something wrong?
>
> To solve it, i've implemented some kind of "ping" to the slaves  
> service every Xseconds. When a new slave it's discovered, the  
> periodic ping starts.
> When ping it's failing i know there be some problem with networking.
>
> I wonder if avahi itself provides a native workaround to avoid the  
> coding of those nasty "ping" cycles ...

This is normal.. it will disappear after some time.

The instant removal of an advertised service relies on the host  
sending a "gone away" message (more specifically, it updates the TTL  
of its record to expire in I think.. 1 second)

This is because mDNS uses caching.. if it didn't use caching it would  
cause alot more network traffic and would hammer especially wireless  
networks.



Having not really worked with it for a while.. I can't remember all  
the details but I suspect you can change the TTL in the Avahi API call  
to make these timeouts happen a little quicker, but you will increase  
network traffic by doing so.

Really your application should not rely on Avahi for "service  
undiscovery".. it's meant generally for "unreliable service  
discovery".  You are best of actually having some protocol between the  
master and slave and just using avahi for the slave to find the master  
in the first instance.

Regards,
Trent


More information about the avahi mailing list