diff -up netkit-rwho-0.17/rwhod/rwhod.c.neighbours netkit-rwho-0.17/rwhod/rwhod.c --- netkit-rwho-0.17/rwhod/rwhod.c.neighbours 2011-06-01 18:26:01.913226552 +0200 +++ netkit-rwho-0.17/rwhod/rwhod.c 2011-06-01 18:28:44.434226510 +0200 @@ -383,6 +383,8 @@ broadcaster() getboottime(&mywd); while (1) { + if (!configure(sk)) + exit(1); sendpacket(&mywd); (void) sleep(AL_INTERVAL); } @@ -603,6 +605,20 @@ configure(int s) struct sockaddr_in *sn; register struct neighbor *np; + /* forget previous neighbors; interfaces may have changed */ + for (np = neighbors; np != NULL; ) { + register struct neighbor *pp; + + if(np->n_name) + free(np->n_name); + if(np->n_addr) + free(np->n_addr); + pp = np; + np = np->n_next; + free((char *)pp); + } + neighbors = 0; + ifc.ifc_len = sizeof (buf); ifc.ifc_buf = (char *)buf; if (ioctl(s, SIOCGIFCONF, &ifc) < 0) {