Sad7:
Ta se você tem uma thread para resposta, porque é que você starta 2 outras a cada nova conexão?
Para ser mais exato, ao startar o sistema, sem que nenhuma conexão seja feita, quantas threads passam a existir?
Veja se da pra entender melhor assim, eu tenho uma thread de envio e uma de resposta para cada cliente conectado e apenas uma fila para processamento, ou seja, todos os clientes postam numa unica fila que eh verificada pelas threads de envio, entao vc me pergunta, pra q fazer duas threads de envio?! pq no meu processamento eu uso uma api particular que precisa de um objeto dela por cliente.
E enquanto eu nao tenho cliente conectado nao esta rodando nehuma thread( e ai o processamento da maquina esta zerado, quando um cliente conecta, o processamento vai para 99% mesmo sem ter requisição).
entao, estou usando a thread do boost, porem o socket nao eh, poderia ser o socket o problema?!
Não sei qual socket está usando, então não da pra saber. Tenta usar o boost::asio, funciona!
E sobre seu modelo de arquitetura, tenta utilizar uma trhead para o socket, eu digo, para leitura do mesmo, independente de quantas conexões. Onde a cada leitura ela cachea o que leu em uma fila, para que assime então uma outra ou outras threads leiam essa fila(sincronizadamente), processem e respondam a mensagem para o cliente.
Assim teoricamente você manteria no mínimo 2 threads rodando e no máximo quantas conexões existirem.
E outra você já debugou sua aplicação para saber quantas vezes o socket está notificando novas conexões a cada nova conexão?
Pense que se você abre thread a cada conexão e que se seu socket notifica erroneamente então você vai abrir mais de uma thread sem necessidade. Pode ser esse o problema. Então por segurança utilize os sockets do boost::asio.