Untested but looks good. Fabio
On Mon, 2009-03-30 at 17:13 -0400, Lon Hohberger wrote: > If no interface is selected when using ipv4, > go back to binding to 'any' address. > > Signed-off-by: Lon Hohberger <l...@redhat.com> > --- > fence/agents/xvm/mcast.c | 16 +++++++++++++--- > 1 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/fence/agents/xvm/mcast.c b/fence/agents/xvm/mcast.c > index 1a7265d..1effa83 100644 > --- a/fence/agents/xvm/mcast.c > +++ b/fence/agents/xvm/mcast.c > @@ -35,6 +35,8 @@ ipv4_recv_sk(char *addr, int port, unsigned int ifindex) > struct ip_mreqn mreq; > struct sockaddr_in sin; > > + memset(&mreq, 0, sizeof(mreq)); > + > /* Store multicast address */ > if (inet_pton(PF_INET, addr, > (void *)&mreq.imr_multiaddr.s_addr) < 0) { > @@ -72,13 +74,19 @@ ipv4_recv_sk(char *addr, int port, unsigned int ifindex) > * Join multicast group > */ > /* mreq.imr_multiaddr.s_addr is set above */ > - mreq.imr_ifindex = ifindex; > + if (ifindex <= 0) { > + dbg_printf(4,"Using 'any' address/interface\n"); > + mreq.imr_address.s_addr = htonl(INADDR_ANY); > + } else { > + dbg_printf(4,"Using interface index %d\n", ifindex); > + mreq.imr_ifindex = ifindex; > + } > dbg_printf(4, "Joining multicast group\n"); > if (setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, > &mreq, sizeof(mreq)) == -1) { > - printf("Failed to bind multicast receive socket to " > + dbg_printf(1,"Failed to bind multicast receive socket to " > "%s: %s\n", addr, strerror(errno)); > - printf("Check network configuration.\n"); > + dbg_printf(1,"Check network configuration.\n"); > close(sock); > return -1; > } > @@ -106,6 +114,8 @@ ipv4_send_sk(char *send_addr, char *addr, int port, > struct sockaddr *tgt, > return -1; > } > > + memset(&mreq, 0, sizeof(mreq)); > + > /* Store multicast address */ > mcast.sin_family = PF_INET; > mcast.sin_port = htons(port);