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:
-
50011e50022são números de porta que você escolhe. - O endereço
127.255.255.255significa 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.255deve limitar os receptores a essa interface, para que você não precise se preocupar com pacotes UDP (desonestos?) de outro lugar, se houver. - Um
sourceportfixo 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.
-
reuseaddrpermite 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
sourceportpara 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 (50011no meu exemplo) para uma porta privilegiada.