Maintenant qu'est-ce que c'est?
Une socket, ou "socket" peut avoir plusieurs choses:
Tout d’abord, il s’agit d’un modèle théorique et d’une interface de programmation (API) . Cela signifie que vous devez suivre un ensemble de règles et un ensemble de fonctions que vous pouvez utiliser pour écrire des programmes qui font quelque chose, selon un contrat spécifié avec précision. Dans ce cas particulier, quelque chose signifie échanger des données avec un autre programme.
L'API de sockets abstraite largement les détails de la "communication" en général. Il résume avec qui vous parlez et comment, dans une seule forme (presque) homogène et identique.
Vous pouvez créer des sockets dans différents "domaines" (tels que, par exemple, un "socket unix" ou un "socket internet") et différents types de communication (par exemple, un socket "datagramme" ou un "stream") et parler à différents destinataires. et tout fonctionne exactement de la même manière (enfin, 99%, il y aura évidemment des différences minimes dont vous devrez tenir compte).
Vous n'avez pas besoin de savoir (et vous ne voulez même pas savoir!) Si vous parlez à un autre programme sur le même ordinateur ou sur un autre ordinateur, ou s'il existe un réseau IPv4 ou IPv6 entre ces ordinateurs, ou peut-être un autre protocole dont vous n'avez jamais entendu parler.
socket
est également le nom de la fonction de bibliothèque (ou syscall) qui crée "le socket ", qui est un type de fichier spécial (tout ce qui est sous Unix est un fichier).
Comment ça se compare à ...
les sockets tombent dans la même catégorie que les pipes et nomment les pipes
Un tuyau est un moyen de communication à sens unique entre un lecteur et un rédacteur (tous deux des programmes) sur le même ordinateur. Il simule un flux de données (comme par exemple TCP).
C'est-à-dire qu'il n'existe aucun "message" ou "bloc de données" individuel du point de vue du canal. Vous pouvez copier toute quantité de données dans "une extrémité", et quelqu'un d'autre peut lire n'importe quelle quantité de données (pas nécessairement les mêmes, et pas nécessairement en une fois) à "l'autre extrémité" dans le même ordre d'octet que vous avez poussé dedans.
Un tube nommé est, bien, simplement un tube qui possède un nom dans le système de fichiers . C'est-à-dire que c'est quelque chose qui ressemble et se comporte comme un fichier, il apparaît dans la liste des répertoires et vous pouvez l'ouvrir, l'écrire, etc. etc. Notez que vous pouvez également créer des fichiers spéciaux de socket (qui seraient des sockets nommés). .
En revanche, une prise est un moyen de communication bidirectionnelle ("duplex"), ce qui signifie que vous pouvez écrire et lire à partir de la même prise et que vous n’avez pas besoin de deux prises distinctes pour une communication bidirectionnelle.
En outre, une socket peut agir comme un flux (identique à un tuyau), ou envoyer des messages discrets, non fiables, ou des messages ordonnés discrets (les deux premiers fonctionnent sur n’importe quel domaine, le dernier uniquement sur "domaine unix" ) Il peut envoyer des messages (ou simuler un flux) à quelqu'un sur un ordinateur totalement différent. Une socket peut même créer une forme de communication un-à-plusieurs (multidiffusion) dans certaines conditions.
En gardant cela à l’esprit, il est clair que les sockets font quelque chose de beaucoup plus compliqué et ont généralement plus de frais généraux que les pipes (qui ne sont fondamentalement rien de plus qu’un simple memcpy
tampon vers / depuis un tampon!), Mais si vous créez des sockets locaux ordinateur), le système d’exploitation applique généralement un raccourci fortement optimisé, de sorte qu’il n’ya vraiment pas beaucoup de différence.
communication inter-processus parfois mentionnée à propos des réseaux
Oui, les sockets sont un moyen possible de communication inter-processus (mémoire partagée et canaux étant des exemples de solutions de rechange). Tous en même temps, ils sont utilisés pour "réseauter", comme expliqué ci-dessus.