Ответ
В IPv4 для широковещательной передачи (broadcast) в пределах локальной сети используется специальный адрес 255.255.255.255. Этот адрес направляет пакет всем узлам в текущем сегменте сети.
В C++ при работе с сокетами для этого используется константа INADDR_BROADCAST:
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
// Создание адреса для широковещательной отправки
struct sockaddr_in broadcastAddr;
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_port = htons(12345); // пример порта
broadcastAddr.sin_addr.s_addr = INADDR_BROADCAST; // 255.255.255.255
Важно: Перед использованием широковещания на сокете необходимо установить соответствующую опцию:
int broadcastEnable = 1;
int result = setsockopt(socketFd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
if (result < 0) {
// Обработка ошибки
}
В IPv6 концепция широковещания заменена на многоадресную рассылку (multicast). Например, адрес ff02::1 предназначен для всех узлов в локальной сети (link-local scope).