Получение UDP-трансляции
Я должен получить UDP-трансляцию (в Ubuntu, если это имеет какое-то значение). Используя Wireshark, я вижу, что пакет отправляется с сервера, и я вижу, что он принимается моей клиентской машиной, но моя программа полностью забывает. Вот что у меня есть:
sockaddr_in si_me, si_other;
int s;
assert((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))!=-1);
int port=6000;
int broadcast=1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST,
&broadcast, sizeof broadcast);
memset(&si_me, 0, sizeof(si_me));
si_me.sin_family = AF_INET;
si_me.sin_port = htons(port);
si_me.sin_addr.s_addr = INADDR_ANY;
assert(::bind(s, (sockaddr *)&si_me, sizeof(sockaddr))!=-1);
while(1)
{
char buf[10000];
unsigned slen=sizeof(sockaddr);
recvfrom(s, buf, sizeof(buf)-1, 0, (sockaddr *)&si_other, &slen);
printf("recv: %s\n", buf);
}
Он компилируется в режиме отладки, утверждения не стираются во время компиляции, и моя программа просто блокируетсяrecvfrom
.
Есть ли еще какой-нибудь обруч, через который я должен прыгнуть, чтобы получить нецелевую UDP-трансляцию?
Изменить: просто немного больше информации, у меня есть два компьютера, подключенных на выделенном коммутаторе, никаких внешних помех. У меня также есть вторая сетевая карта на моем клиентском компьютере, которая подключается к корпоративной сети, которая также работает.
Я могу пропинговать как внешний (работающий Интернет), так и мой сервер (плюс я вижу фактические пакеты в Wireshark), но вы никогда не знаете, что может вызвать эту проблему.