Loopback in multicast

Looping back to local processes (local sockets) should work without adding a multicast route to lo. Just make sure you have a useful route set to some external interface. The packets will still be routed internally. (Linux does a lot of routing behind the scenes.)

You need IP_MULTICAST_LOOP, this looks good.

Did you properly join the multicast group in all processes? IP_ADD_MEMBERSHIP? Without this you get all kinds of bogus behavior.

You can look at the local routing table to see what Linux does locally to packets. It is usually far from trivial:

sudo ip route show table local

You can also look at the current multicast group memberships:

netstat -g

Does the output and the ref counts make sense in your case?