Eu não sou exatamente certo o que sua pergunta está perguntando, mas parece que você está lutando com o fato de que você precisa de um loop de ouvir conexões com a escolha para o cliente em seu servidor, mas você também precisa fazer trabalho útil. Do mesmo modo, no seu cliente, pode ser necessário ouvir para entrada de usuário, mas ao mesmo tempo para esperar respostas do servidor.
Eu não sei o idioma que você está usando, mas eu tenho feito isso em PHP que coloca uma fina capa ao redor do soquete relacionados com chamadas de sistema para que elas são bastante semelhantes. Você geralmente precisa decidir se a fazer uma escolha () chamada bloqueio ou não. se não é o bloqueio, talvez você esteja girando no seu principal loop, chamando repetidamente escolha () sem nenhum resultado e ainda mastigação até muito tempo da CPU.
Você pode decidir sobre um tempo em que seleccionar () blocos de 100 milissegundos sobefore ou decidir que não há dados e continuar a executar outro código. Isso tende a prejudicar o desempenho da sua aplicação, porque pode haver coisas que você deveria ir enquanto o seu aplicativo está dormindo.
Se é isso que a pergunta é sobre, você pode querer verificar em tornar a sua aplicação multi-threaded (ou multiprocessamento). Este conceito poderia aplicar-se tanto ao servidor e cliente. Você pode manter o seu principal discussão trabalham longe e delegar a pedido I / O para separar uma discussão e deixar o sistema operacional cuida de toda a programação. Os I / O thread irá fila de todas as I / O e os principais pedidos discussão será devidamente serviço deles, entregando-os de volta para o I / O thread quando eles estão completos. Infelizmente, ainda estou olhando para roscar mim para que eu possa não ser de muito mais ajuda. Pode chegar um pouco peludo quando você lidar com multiprocessamento multithreading ou porque você tem que cuidar de coisas como
race conditions,
deadlock, E uma série de outros problemas relacionados a concorrência.