I have a code in which send multicast datagrams. A critical piece of code:
uint32_t port;
int sockfd, err_ip;
const uint32_t sizebuff = 65535 - (20 + 8);
uns
IP_ADD_MEMBERSHIP
and bind()
are only required for receiving multicast, use IP_MULTICAST_IF
instead for effectively a "send-only membership" of a multicast group.
IP_MULTICAST_IF
sets the kernel to send multicast packets for a given group on a given interface, it is effectively "send-only" as you will not be able to receive traffic on that group after setting. This varies by platform: Posix platforms generally function this way as an optimisation, whilst Win32 will perform software level routing to propagate locally generated packets.
If it works for one IP but not for another, maybe this can help.
What does "IP_ADD_MEMBERSHIP: No such device" mean?
It means that the tool is trying to use multicast but the network interface doesn't support it There are two likely causes:
Your machine doesn't have multicast support enabled. For example, on Linux and FreeBSD it is possible to compile a kernel which doesn't support multicast.
You don't have a route for multicast traffic. Some systems don't add this by default, and you need to run.
route add -net 224.0.0.0 netmask 224.0.0.0 eth0
(or similar). If you wish to use RAT in unicast mode only, it is possible to add the multicast route on the loopback interface.