L'API socket est le standard de facto pour le protocole TCP/IP et UDP/IP communications (code de mise en réseau comme nous le savons). Cependant, l'une de ses fonctions essentielles, en accept()
est un peu magique.
Pour emprunter un semi-formel de la définition:
accept() est utilisée sur le serveur. Il accepte un reçu entrant tentative pour créer une nouvelle connexion TCP le client distant, et crée un nouveau prise associée avec le socket paire d'adresses de cette connexion.
En d'autres termes, accept
renvoie un nouveau socket par le biais de laquelle le serveur peut communiquer avec le nouveau client. L'ancienne douille ( accept
a été appelé) reste ouverte, sur le même port, à l'écoute de nouvelles connexions.
Comment est - accept
travail? Comment est-il mis en œuvre? Il y a beaucoup de confusion sur ce sujet. Beaucoup de gens prétendent accepter ouvre un nouveau port et vous communiquer avec le client à travers elle. Mais ce n'est évidemment pas vrai, car aucun nouveau port est ouvert. Vous pouvez réellement communiquer via le même port avec différents clients, mais comment? Lorsque plusieurs threads appellent recv
sur le même port, comment les données pour savoir où aller?
Je suppose que c'est quelque chose le long des lignes de l'adresse du client associé à un descripteur de socket, et chaque fois que les données proviennent de recv
il est acheminé à la prise correcte, mais je ne suis pas sûr.
Ce serait formidable pour obtenir une explication approfondie des rouages de ce mécanisme.