Recebendo transmissão UDP

Eu tenho que receber uma transmissão UDP (no Ubuntu, se isso faz alguma diferença). Usando o Wireshark, posso ver o pacote sendo enviado da máquina do servidor, e posso vê-lo sendo recebido pela máquina do meu cliente, mas meu programa é completamente ignorante. Isso é o que eu tenho:

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);
}

É compilado no modo de depuração, as afirmações não estão sendo apagadas durante a compilação, e meu programa apenas bloqueiarecvfrom.

Existe algum outro aro que eu tenha que pular para receber uma transmissão UDP não direcionada?

Edit: apenas um pouco mais de informação, eu tenho os dois computadores conectados em um switch dedicado, sem interferência externa. Eu também tenho uma segunda placa de rede no meu computador cliente que se conecta à rede da empresa, o que também funciona.

Eu posso fazer ping tanto do lado de fora (Internet trabalhando) e minha máquina do servidor (mais eu posso ver os pacotes reais no Wireshark), mas você nunca sabe o que pode causar esse problema.

questionAnswers(2)

yourAnswerToTheQuestion