summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2005-11-14 23:58:36 +0000
committerLennart Poettering <lennart@poettering.net>2005-11-14 23:58:36 +0000
commit2fec4cc43bbc88b71484a73fa8c2911fe51b5a06 (patch)
tree8f1d10e239218db8851f90e852dc5d0394d58cb9
parent7ff7db1bd0b18a82284016c3a528bb2d45ec6b09 (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.c14
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;
}