Use SO_BINDTODEVICE if we're using old multicast API (i.e., struct ip_mreq

and not ip_mreqn). This should get multicasts on unnumbered PtP links work.
This commit is contained in:
Martin Mares 1999-04-14 11:21:02 +00:00
parent 9da4d14340
commit 36154beb70

View file

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