Server by neměl být vázán na adresu, kterou získáte z getaddrinfo
, místo toho by měl být vázán na 127.255.255.255
(pro rozhraní zpětné smyčky).
Hotový příklad vysílacího serveru/klienta naleznete na http://www.ccplusplus.com/2011/09/udp-broadcast-client-server-example.html
Unixové doménové sockety nepodporují multi-/broadcasting.
Můžete vysílat na místním rozhraní 127.0.0.1.
I když to původní otázka výslovně neříká, domnívám se, že původní tazatel chtěl „vysílat“ do více aplikací běžících na stejné instanci operačního systému (stejný počítač jako staré časovače).
To je podpořeno použitím 'SO_REUSEADDR' v příkladu posluchače a následnými komentáři Yuviho a nakonec návrhem na použití IP multicast.
Původní otázka by měla být objasněna.
Domnívám se, že distribuce paketů s více vazebnými moduly na jednom portu UDP se při použití SO_REUSEADDR mezi operačními systémy liší. Moje zkušenost s nedávným systémem Windows je taková, že jediný „vazač“ dostane výhradně všechny pakety, dokud neuvolní svou vazbu. pořadač je vybrán a prezentovány všechny přijaté pakety, dokud se neuvolní, a tak dále...
To se zjevně liší od nedávných linuxových jader, jak je vysvětleno v tomto odkazu:https://stackoverflow.com/a/14388707/86375Zdá se, že tato stránka tvrdí, že Linux bude opakovaně přijímat pakety mezi více spojovacími moduly.
Konečný výsledek, pokud doufáte, že pošlete mnoha lidem pomocí jediného odeslaného datagramu jako původní plakát, a pokusíte se použít IP unicast, nikoli IP multicast, můžete být zklamáni. (Moje zkušenost a odkaz výše ukazuje, že můžete svázat více, ale to neznamená vícenásobné doručení přijatých datagramů, ani na Linuxu nebo Windows)
Původní plakát měl zkusit použít vícesměrové vysílání.