под виндами работает на ура, под линуксом только при указании широковещательного адреса с маской подсети, например 10.255.255.255, задача чтобы рассылка пакетов шла в независимости от сетевых настроек, либо как другой вариант решения проблемы - как программно узнать маску подсети?
зы самый злой вариант уже брать этот адрес в качестве аргумента...
инициализация сокета:
Код: Выделить всё
...
sock = socket(AF_INET,SOCK_DGRAM,0);
sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
local_addr.sin_port = htons(port);
int broad = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *) &broad, sizeof(broad));
bind(sock,(struct sockaddr*) &local_addr, sizeof(local_addr));
...отправка пакета:
Код: Выделить всё
...
sockaddr_in broad;
broad.sin_addr.s_addr = htonl(INADDR_BROADCAST); //inet_addr("10.255.255.255");
broad.sin_family = AF_INET;
broad.sin_port = htons(205);
sendto(sock, data, data_size, 0, (sockaddr*)&broad, sizeof(sockaddr_in));
...