Para treinar minhas habilidades em C resolvi criar um chat multiusuário usando a sockets e threads. (sys/socket.h e pthread.h)
Por enquanto a aplicação segue assim:
Server: Aguarda múltiplas conexões, isto é, uma thread executa indeterminadamente uma função que aceita novas conexões. cada nova conexão é um socket que é adicionado a uma estrutura do tipo Lista.
Cliente: Se conecta ao server e pede indeterminadamente que o usuário digite mensagens de texto que são enviadas ao servidor, a conexão e o programa cliente é encerrado quando digitado a string “#quit”.
A minha dúvida é a seguinte: para receber as mensagens é utilizado a função recv(), o programa fica travado nesta função enquanto os dados não for recebidos, então para receber mensagens de todos os clientes conectados, eu deveria criar uma thread individual para cada um? E se centenas ou milhares de usuários conectar-se a este server? Terei de criar centenas ou milhares de threads?
Tem algum outro jeito de receber múltiplas mensagens que não usando uma thread individual para cada cliente conectado?