exemple pour expliquer unix domain socket-AF INET vs AF UNIX
pendant que je lisais pour quoi AF_INET
signifie, j'ai appris qu'il existe une autre famille appelée UNIX domain socket
. Voici le lien wiki j'ai lu à ce sujet.
je ne comprends pas ce que cela signifie:
les sockets de domaine Unix utilisent le système de fichiers comme espace de nom d'adresse. Ils sont référencés par des processus comme inodes dans le système de fichiers. Ce permet à deux processus pour ouvrir le même socket pour communiquer. Cependant, la communication se produit entièrement dans le système d'exploitation noyau.
Si je veux faire SSH or FTP
, ce que la famille dois-je utiliser AF_INET or AF_UNIX
. Je suis vraiment confus ici un peu.
2 réponses
Si vous souhaitez communiquer avec un hôte distant, vous aurez probablement besoin d'un INET
socket.
La différence est que l' INET
socket est lié à une adresse IP-port tuple, alors qu'un UNIX
socket est "lié" à un fichier spécial sur votre système de fichiers. En général, seuls les processus tournant sur la même machine peuvent communiquer à travers cette dernière.
alors, pourquoi utiliser un UNIX
socket? Exactement pour la raison ci-dessus: communication entre les processus sur la même hôte, étant une alternative légère à un INET
prise par bouclage.
En fait, INET
les sockets se trouvent au sommet d'une pile TCP/IP complète, avec des algorithmes de congestion de la circulation, des retours en arrière et autres à gérer. UNIX
la socket n'a pas à traiter de ces problèmes, puisque tout est conçu pour être local à la machine, donc son code est beaucoup plus simple et la communication est plus rapide. Bien entendu, vous ne remarquerez probablement la différence qu'en cas de charge importante, par exemple lorsque inverser le proxy d'un serveur d'application (noeud.js, Tornado...) derrière Nginx etc.
les Sockets AF_NUX permettent une grande communication entre les processus. Ouvrir une paire de douilles socketpair(..)" et de se lier à un nom de fichier temporaire. Ecrivez à l'un des deux arrive à l'autre. Le noyau achemine les messages sans passer par le protocole ou le système de fichiers. On peut utiliser le blocage i / o ou select(...) pour synchroniser les threads et les processus de manière FIFO. J'aime le non-blocage avec le mode select et datagram (possibilité d'obtenir une longueur) mais vous pouvez choisir le vôtre. Assurez-vous de supprimer le fichier temporaire sur sortie (elle aura zéro octets mais encore dans le système de fichier de répertoire) pam