Вы, возможно, уже поняли это (поскольку вопросу уже 2 года), но для многоадресной рассылки на одном хосте вам нужно сделать только две вещи: (1) убедиться, что в принимающих многоадресных сокетах установлен SO_REUSEADDR (чтобы несколько процессов могли связать один и тот же адрес многоадресной рассылки) и (2) убедитесь, что отправляющим сокетам многоадресной рассылки установлен IP_MULTICAST_LOOP (чтобы пакеты были «возвращены» получателям в одной системе). Если ваше приложение использует один и тот же сокет для отправки и получения многоадресных рассылок, вы должны установить для него оба параметра сокета.
int recv_s = socket(AF_INET, SOCK_DGRAM, 0);
int send_s = socket(AF_INET, SOCK_DGRAM, 0);
u_int yes = 1;
setsockopt(recv_s, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes));
setsockopt(send_s, IPPROTO_IP, IP_MULTICAST_LOOP, &yes, sizeof(yes));