2 votes

<html> <h1>Implementation de la fonction accept() en Unix</h1> </html>

J'ai cherché dans le code BSD mais je me suis perdu quelque part :(

La raison pour laquelle je veux vérifier est la suivante :

Le RFC TCP (http://www.ietf.org/rfc/rfc793.txt) section 2.7 indique :

"Pour fournir des adresses uniques à chaque TCP, nous concaténons une adresse Internet identifiant le TCP avec un identifiant de port pour créer un socket qui sera unique sur tous les réseaux connectés ensemble. Une connexion est entièrement spécifiée par la paire de sockets aux extrémités."

Cela signifie-t-il : socket = local (ip + port) ?

Si oui, alors la fonction accept d'Unix renvoie un nouveau descripteur de socket. Cela signifiera-t-il qu'un nouveau socket est créé (et donc un nouveau port est créé) pour répondre aux demandes des clients ?

PS : Je suis novice en programmation réseau.

[MISE À JOUR] J'ai compris ce que j'ai lu sur Comment fonctionne la fonction accept() de l'API socket ?. Mon seul doute est le suivant : si socket = (port local + IP locale), alors un nouveau socket signifierait un nouveau port pour la même IP. En suivant cette logique, accept renvoie un nouveau socket (donc un nouveau port est créé). Ainsi, tout envoi devrait se faire via ce nouveau port. Est-ce que ma compréhension est correcte ?

8voto

Brian White Points 2493

Vous avez en grande partie raison. Lorsque vous accept(), un nouveau socket est créé et le socket d'écoute reste ouvert pour permettre plus de connexions entrantes, mais le nouveau socket utilise le même numéro de port local que le socket d'écoute.

Une connexion est définie par un 5-tuple : protocole, adresse locale, port local, adresse distante, port distant.

Par conséquent, chaque connexion acceptée est unique même si elles partagent toutes le même numéro de port local car l'adresse ip/port distant est toujours différente. Le socket d'écoute n'a pas d'adresse ip/port distant et est donc également unique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X