Получение 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), но вы никогда не знаете, что может вызвать эту проблему.

Ответы на вопрос(2)

Ваш ответ на вопрос