Multicasts once again: When using SO_BINDTODEVICE, don't specify IP address

of the interface.
This commit is contained in:
Martin Mares 1999-04-14 12:29:47 +00:00
parent 1b50a1e4be
commit 4c5e5e3a1c

View file

@ -422,16 +422,17 @@ sk_open(sock *s)
struct ip_mreq mreq_add; struct ip_mreq mreq_add;
ASSERT(s->iface); ASSERT(s->iface);
set_inaddr(&mreq, s->iface->ip); set_inaddr(&mreq, s->iface->ip);
mreq_add.imr_interface = mreq;
#ifdef SO_BINDTODEVICE #ifdef SO_BINDTODEVICE
{ {
struct ifreq ifr; struct ifreq ifr;
strcpy(ifr.ifr_name, s->iface->name); strcpy(ifr.ifr_name, s->iface->name);
if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)) < 0) if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)) < 0)
ERR("SO_BINDTODEVICE"); ERR("SO_BINDTODEVICE");
mreq_add.imr_interface.s_addr = INADDR_ANY;
} }
#else #else
#error Multicasts not supported on PtP devices /* FIXME: Solve it somehow? */ #error Multicasts not supported on PtP devices /* FIXME: Solve it somehow? */
mreq_add.imr_interface = mreq;
#endif #endif
#endif #endif
set_inaddr(&mreq_add.imr_multiaddr, s->daddr); set_inaddr(&mreq_add.imr_multiaddr, s->daddr);