Interrompendo epoll_wait com um evento não IO, sem sinais

O cenário atual é epoll_wait em alguns fds e uma fila de possíveis mensagens recebidas. Gostaria que o loop abaixo de epoll_wait fosse executado no evento IO ou em uma nova mensagem.
Maneiras que eu sei:

Use umtime msec timeout e verifique a fila logo no inícioUse otruque de autoduto do código da fila quando as mensagens ficam disponíveisInterrompa o syscall com um sinal padrãoUse epoll_pwait e refine o ponto anterior

Nenhum dos pontos postados acima me satisfaz o suficiente e eu queria saber se existem outros métodos que não encontrei.
Os motivos são:

Sinais são algo a evitar no código multithread e não são muito confiáveisTimeout one remove parte do benefício do epoll, acordando apenas com eventosO truque de cano automático é a melhor abordagem para o momento, mas ainda assim muitos clichês

idéias?

questionAnswers(2)

yourAnswerToTheQuestion