A API do soquete é o padrão de fato para as comunicações TCP / IP e UDP / IP (ou seja, o código de rede como o conhecemos). No entanto, uma de suas principais funções accept()é um pouco mágica.
Para emprestar uma definição semi-formal:
accept () é usado no lado do servidor. Ele aceita uma tentativa de entrada recebida para criar uma nova conexão TCP do cliente remoto e cria um novo soquete associado ao par de endereços de soquete dessa conexão.
Em outras palavras, acceptretorna um novo soquete através do qual o servidor pode se comunicar com o cliente recém-conectado. O soquete antigo (no qual acceptfoi chamado) permanece aberto, na mesma porta, ouvindo novas conexões.
Como acceptfunciona? Como é implementado? Há muita confusão sobre esse tópico. Muitas pessoas afirmam que aceitar abre uma nova porta e você se comunica com o cliente através dela. Mas isso obviamente não é verdade, pois nenhuma porta nova é aberta. Você realmente pode se comunicar através da mesma porta com clientes diferentes, mas como? Quando vários encadeamentos chamam recvna mesma porta, como os dados sabem para onde ir?
Eu acho que é algo semelhante ao endereço do cliente associado a um descritor de soquete, e sempre que os dados chegam, recveles são roteados para o soquete correto, mas não tenho certeza.
Seria ótimo obter uma explicação completa do funcionamento interno desse mecanismo.