Quelle est la différence entre les tuyaux et les sockets?

J’ai trouvé quelques réponses, mais elles semblent être spécifiquement liées aux machines Windows. Alors, ma question est la suivante: quelles sont les différences entre les tubes et les sockets, et quand / comment choisir l’un par rapport à l’autre?

Quelles sont les différences entre les tubes et les sockets, et quand / comment choisir l’un par rapport à l’autre?

Les pipes et les sockets gèrent les stream d’octets, mais ils le font de différentes manières …

  • les pipes n’existent que dans un hôte spécifique et font référence à la mise en mémoire tampon entre les fichiers virtuels ou à la connexion de la sortie / entrée des processus au sein de cet hôte. Il n’y a pas de concepts de paquets dans les tuyaux.
  • des sockets en communication par paquets utilisant IPv4 ou IPv6; cette communication peut s’étendre au-delà de localhost. Notez que différents points de terminaison d’un socket peuvent partager la même adresse IP; pour ce faire, ils doivent toutefois écouter sur différents ports TCP / UDP.

Utilisation :

  • Utilisez des tuyaux:
    • lorsque vous souhaitez lire / écrire des données dans un fichier sur un serveur spécifique. Si vous utilisez C, vous read() et write() sur un tube.
    • lorsque vous voulez connecter la sortie d’un processus à l’entrée d’un autre processus … voir popen ()
  • Utilisez des sockets pour envoyer des données entre différents points de terminaison IPv4 / IPv6. Très souvent, cela se produit entre différents hôtes, mais les sockets peuvent être utilisés dans le même hôte

BTW, vous pouvez utiliser netcat ou socat pour joindre un socket à un tube.

Pour compléter la réponse donnée par Mike, il est important de mentionner l’existence de sockets de domaine UNIX, disponibles sur tous les systèmes d’exploitation compatibles POSIX. Bien que très similaires aux sockets internet “normaux” en termes de sémantique d’utilisation, ils sont purement locaux à la machine (bien entendu, les sockets Internet peuvent également fonctionner localement) et se comportent donc presque comme un tube. Presque, car un tube UNIX est par définition unidirectionnel:

Les tuyaux et les FIFO (également appelés canaux nommés) fournissent un canal de communication interprocessus unidirectionnel. Une pipe a une fin de lecture et une fin d’écriture. Les données écrites à l’extrémité écriture d’un canal peuvent être lues à partir de l’extrémité lecture du canal. (extrait de la page de man pipe (7) )

Les sockets de domaine UNIX ont également une fonctionnalité très inhabituelle, car outre les données, elles permettent également d’envoyer des descripteurs de fichiers : de cette manière, un processus non privilégié peut accéder à tout fichier dont le descripteur a été envoyé sur le socket. Selon Wikipedia, cette technique est utilisée par le démon d’parsing antivirus ClamAV.