Server tidak boleh terikat ke alamat yang Anda dapatkan dari getaddrinfo
, melainkan harus terikat ke 127.255.255.255
(untuk antarmuka loopback).
Untuk contoh server/klien siaran yang sudah jadi, lihat http://www.ccplusplus.com/2011/09/udp-broadcast-client-server-example.html
Soket domain Unix tidak mendukung multi-/penyiaran.
Anda dapat menyiarkan di antarmuka lokal 127.0.0.1.
Meskipun pertanyaan awal tidak secara eksplisit mengatakannya, saya yakin penanya ingin 'menyiarkan' ke beberapa aplikasi yang berjalan pada contoh sistem operasi yang sama (komputer yang sama ke timer lama).
Ini didukung oleh penggunaan 'SO_REUSEADDR' dalam contoh pendengar, dan komentar tindak lanjut oleh Yuvi, dan terakhir saran untuk menggunakan multicast IP.
Pertanyaan awal harus diklarifikasi.
Saya percaya distribusi paket dengan banyak pengikat pada satu port UDP bervariasi antara sistem operasi saat menggunakan SO_REUSEADDR. Pengalaman saya pada Windows baru-baru ini, adalah bahwa satu 'pengikat' secara eksklusif diberikan semua paket sampai dia melepaskan ikatannya, pada saat itu, yang lain pengikat dipilih dan disajikan semua paket yang diterima, sampai dia melepaskan, dan seterusnya...
Ini tampaknya berbeda dari kernel Linux terbaru, seperti yang dijelaskan dalam tautan ini:https://stackoverflow.com/a/14388707/86375Halaman itu tampaknya mengklaim Linux akan melakukan round-robin menerima paket antara beberapa pengikat.
Hasil akhirnya, jika Anda berharap untuk mengirim-ke-banyak menggunakan satu datagram terkirim seperti yang dilakukan poster aslinya, dan Anda mencoba menggunakan IP unicast, bukan IP multicast, Anda mungkin kecewa. (Pengalaman saya, dan tautannya di atas menunjukkan Anda dapat melakukan multi-bind, tetapi itu tidak berarti multi-pengiriman dari datagram yang diterima, baik di Linux maupun Windows)
Poster asli seharusnya mencoba menggunakan multicast.