diff options
author | Lennart Poettering <lennart@poettering.net> | 2005-11-14 23:58:36 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2005-11-14 23:58:36 +0000 |
commit | 2fec4cc43bbc88b71484a73fa8c2911fe51b5a06 (patch) | |
tree | 8f1d10e239218db8851f90e852dc5d0394d58cb9 | |
parent | 7ff7db1bd0b18a82284016c3a528bb2d45ec6b09 (diff) |
deal better with mcast management and disappearing IP addresses
git-svn-id: file:///home/lennart/svn/public/avahi/trunk@965 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe
-rw-r--r-- | avahi-core/iface.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/avahi-core/iface.c b/avahi-core/iface.c index f639821..0f4d518 100644 --- a/avahi-core/iface.c +++ b/avahi-core/iface.c @@ -174,9 +174,11 @@ void avahi_interface_monitor_update_rrs(AvahiInterfaceMonitor *m, int remove_rrs static int interface_mdns_mcast_join(AvahiInterface *i, int join) { char at[AVAHI_ADDRESS_STR_MAX]; + int r; assert(i); - assert((join && !i->mcast_joined) || (!join && i->mcast_joined)); + if (!!join == !!i->mcast_joined) + return 0; if (join) { AvahiInterfaceAddress *a; @@ -207,14 +209,18 @@ static int interface_mdns_mcast_join(AvahiInterface *i, int join) { avahi_address_snprint(at, sizeof(at), &i->local_mcast_address)); if (i->protocol == AVAHI_PROTO_INET6) - avahi_mdns_mcast_join_ipv6(i->monitor->server->fd_ipv6, &i->local_mcast_address.data.ipv6, i->hardware->index, join); + r = avahi_mdns_mcast_join_ipv6(i->monitor->server->fd_ipv6, &i->local_mcast_address.data.ipv6, i->hardware->index, join); else { assert(i->protocol == AVAHI_PROTO_INET); - avahi_mdns_mcast_join_ipv4(i->monitor->server->fd_ipv4, &i->local_mcast_address.data.ipv4, i->hardware->index, join); + r = avahi_mdns_mcast_join_ipv4(i->monitor->server->fd_ipv4, &i->local_mcast_address.data.ipv4, i->hardware->index, join); } - i->mcast_joined = join; + if (r < 0) + i->mcast_joined = 0; + else + i->mcast_joined = join; + return 0; } |