Você pode transmitir o UDP. Esta é a parte do remetente , canalizar tudo para ela:
socat - UDP-DATAGRAM:127.255.255.255:50011,sourceport=50022,broadcast
Receptores usam isso, eles podem entrar ou sair da festa a qualquer momento:
socat - UDP-LISTEN:50011,bind=127.255.255.255,sourceport=50022,reuseaddr
Notas e explicações:
-
50011
e50022
são números de porta que você escolhe. - O endereço
127.255.255.255
significa que o remetente transmite através da interface de loopback, você pode ajustá-lo para transmitir na LAN, se desejar. - Da mesma forma,
bind=127.255.255.255
deve limitar os receptores a essa interface, para que você não precise se preocupar com pacotes UDP (desonestos?) de outro lugar, se houver. - Um
sourceport
fixo por dois motivos:- receptores não "verão" outro remetente (desonesto?) que transmite para o mesmo endereço e porta, mas de outra porta de origem (talvez aleatória);
- depois que o remetente é encerrado por qualquer motivo, você pode reiniciá-lo e todos os receptores existentes não verão a diferença; se o remetente usasse a porta de origem aleatória, os receptores existentes em geral não "veriam" o novo remetente porque ficariam fixos na porta de origem antiga.
-
reuseaddr
permite que vários receptores coexistam. - Tecnicamente, você pode adicionar
reuseaddr
à parte do remetente, isso permite que você execute vários remetentes. Pode levar a saída intercalada no lado de recepção, não é recomendado. - Um remetente em execução impedirá que outro remetente (desonesto?) use exatamente a mesma tupla de endereços e portas. No entanto, assim que o remetente é terminado, outro pode tomar o seu lugar. Se você tiver acesso root, poderá escolher
sourceport
para ser menor que1024
. A maioria dos sistemas operacionais não permite que usuários comuns se conectem a essas portas (o nome é "portas privilegiadas"); Dessa forma, os usuários não poderão representar seu remetente mesmo quando ele estiver morto. Receptores executados por usuários regulares, no entanto, podem usar uma porta privilegiada comosourceport
. Para garantir que apenas o root possa receber, altere a outra porta (50011
no meu exemplo) para uma porta privilegiada.