Isso não é um erro, mas um comportamento esperado. A documentação dos estados MSG_DONTWAIT:
Se nenhum dado estiver disponível, então ao invés de bloquear, retorne imediatamente com o erro EAGAIN.
O que significa que você deve aguardar e lidar com essa situação.
Verifique aqui para referência e aqui para uma discussão similar.