GNU/Linux >> Tutoriels Linux >  >> Linux

Guide des sockets nommés Linux

Un fichier de socket Unix/Linux est essentiellement un FIFO bidirectionnel. Étant donné que les sockets ont été créés à l'origine pour gérer les communications réseau, il est possible de les manipuler en utilisant le send() et recv() appels système. Cependant, dans l'esprit Unix du "tout est un fichier", vous pouvez également utiliser write() et read() . Vous devez utiliser socketpair() ou socket() pour créer des sockets nommés. Un tutoriel pour l'utilisation des sockets en C peut être trouvé ici :Beej's Guide to Unix IPC :Unix Sockets.

Le socat L'utilitaire de ligne de commande est utile lorsque vous voulez jouer avec les sockets sans écrire un "vrai" programme. Il est similaire à netcat et agit comme un adaptateur entre différentes interfaces de réseau et de fichiers.

Liens :

  • socat accueil du projet
  • Une introduction à socat
  • Article intéressant sur les sockets Unix et socat

Créez rapidement un socket en python :

~]# python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/somesocket')"
~]# ll /tmp/somesocket 
srwxr-xr-x. 1 root root 0 Mar  3 19:30 /tmp/somesocket

Ou avec un petit programme C, par exemple, enregistrez ce qui suit dans create-a-socket.c :

#include <fcntl.h>
#include <sys/un.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    // The following line expects the socket path to be first argument
    char * mysocketpath = argv[1];
    // Alternatively, you could comment that and set it statically:
    //char * mysocketpath = "/tmp/mysock";
    struct sockaddr_un namesock;
    int fd;
    namesock.sun_family = AF_UNIX;
    strncpy(namesock.sun_path, (char *)mysocketpath, sizeof(namesock.sun_path));
    fd = socket(AF_UNIX, SOCK_DGRAM, 0);
    bind(fd, (struct sockaddr *) &namesock, sizeof(struct sockaddr_un));
    close(fd);
    return 0;
}

Ensuite, installez gcc, compilez-le et ta-da :

~]# gcc -o create-a-socket create-a-socket.c
~]# ./create-a-socket mysock
~]# ll mysock
srwxr-xr-x. 1 root root 0 Mar  3 17:45 mysock

Linux
  1. Vérifier la connexion ouverte ou fermée ? (en C sous Linux)

  2. API Linux pour déterminer les sockets appartenant à un processus

  3. Quelle technique Linux IPC utiliser ?

  4. Exemple d'utilisation de canaux nommés dans Linux Bash

  5. Linux, sockets, connexion non bloquante

Communication inter-processus sous Linux :Sockets et signaux

Une introduction aux canaux et aux canaux nommés sous Linux

HOWTO :Exécuter Linux sur Android sans racine

Comment trouver la taille du tampon de socket de Linux

Faire une requête https en utilisant des sockets sous Linux

vérifier tous les sockets ouverts dans le système d'exploitation Linux