Estou tentando desenhar um servidor que não desperdice recursos(uso o valgrind para analisar alocações e liberação de memória). Estou acostumado um pouco com pthreads, porém threads em geral podem não ser a melhor solução, fiz alguns testes com pthread de cancelar a thread e os recursos alocados não são liberados, então se eu usasse como descrevi abaixo teria problemas.
Como eu penso servidor:
Quando penso em servidores imagino algo como IRC(só tive experiência como usuário, nem cheirei o IRCD), geralmente quando mexia com Sockets quando um cliente conectava criava uma thread para gerencia-lo(autenticação depois manutenção da conexão; cuidar do timeout) e outra para receber mensagens(filha da de gerenciamento). Usava posix threads.
Na thread de gerenciamento do cliente se ocorresse timeout a thread de receber mensagens era encerrada por cancelamento e depois a thread de gerencimaneto terminava normalmente.
Realmente devo usar threads em C/C++ para esse trabalho com soquetes no lado servidor ou devo usar outra solução? Ou a forma que estou desenhando o servidor está errado?