Primeira janela:
socat -u udp-recv:12345,reuseaddr -
Segunda janela:
socat -u udp-recv:12345,reuseaddr -
Terceira janela
socat - udp-sendto:127.255.255.255:12345,broadcast
Em seguida, insira algumas linhas de texto na terceira janela e veja se você está obtendo algo nas outras duas.
Substitua "socat" por "strat -fe network socat" para ver quais chamadas de sistema estão realmente sendo feitas (supondo que você esteja no Linux, outros unices têm equivalentes às vezes chamados de tusc, struss ou dtruss). O socat é opensource e os pacotes binários estão disponíveis para a maioria dos sistemas operacionais.
socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
sendto(3, "qwe\n", 4, 0, {sa_family=AF_INET, sin_port=htons(12345), sin_addr=inet_addr("127.255.255.255")}, 16) = 4
Acima, os "clientes" receptores vinculam-se ao endereço INADDR_ANY. O que eu encontrei e não sei por que, é que se você ligar a um endereço na sub-rede de loopback, você não está vendo os pacotes chegando.
Veja também:
$ ip route show table local dev lo scope link
broadcast 127.0.0.0 proto kernel src 127.0.0.1
broadcast 127.255.255.255 proto kernel src 127.0.0.1
Se os clientes se ligarem a 127.0.0.0 ou 127.255.255.255 e o servidor enviar para o mesmo endereço (com SO_BROADCAST), também funcionará.