BSD hates it, Linux needs it.
CONFIG_UNIX_IFACE Use Unix interface scanner
CONFIG_UNIX_SET Use Unix route setting
CONFIG_UNIX_DONTROUTE Use setsockopts DONTROUTE (undef for *BSD)
+CONFIG_SKIP_MC_BIND Don't call bird on multicast socket (def for *BSD)
CONFIG_LINUX_SCAN Use Linux /proc/net/route scanner
CONFIG_ALL_MULTICAST krt-iface: All devices support multicasting (i.e., ignore IFF_MULTICAST)
#undef CONFIG_UNIX_IFACE
#undef CONFIG_UNIX_SET
+#define CONFIG_SKIP_MC_BIND
#define CONFIG_ALL_MULTICAST
#define CONFIG_UNNUM_MULTICAST
#undef CONFIG_UNIX_SET
#undef CONFIG_UNIX_DONTROUTE
+#define CONFIG_SKIP_MC_BIND
#define CONFIG_ALL_MULTICAST
#define CONFIG_UNNUM_MULTICAST
#define CONFIG_UNIX_IFACE
#define CONFIG_UNIX_SET
#define CONFIG_UNIX_DONTROUTE
+#undef CONFIG_SKIP_MC_BIND
#define CONFIG_LINUX_SCAN
#define CONFIG_LINUX_MC_MREQ_BIND
#define CONFIG_UNIX_IFACE
#define CONFIG_UNIX_SET
#define CONFIG_UNIX_DONTROUTE
+#undef CONFIG_SKIP_MC_BIND
#define CONFIG_LINUX_SCAN
#define CONFIG_LINUX_MC_MREQN
#define CONFIG_MULTIPLE_TABLES
#define CONFIG_ALL_TABLES_AT_ONCE
+#undef CONFIG_SKIP_MC_BIND
+
#define CONFIG_LINUX_MC_MREQN
#define CONFIG_UNIX_DONTROUTE
ERR("SO_REUSEADDR");
}
fill_in_sockaddr(&sa, s->saddr, port);
+#ifdef CONFIG_SKIP_MC_BIND
+ if (type == SK_IP && bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0)
+#else
if (bind(fd, (struct sockaddr *) &sa, sizeof(sa)) < 0)
+#endif
ERR("bind");
}
fill_in_sockaddr(&sa, s->daddr, s->dport);