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.

15
demandé sur Ankit Sharma 2014-01-10 02:28:42

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.

33
répondu Stefano Sanfilippo 2014-10-14 16:31:06

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

0
répondu jlp 2016-02-05 20:10:08