Maison  >  Article  >  Qu’est-ce que l’utilisation d’une paire de sockets ?

Qu’est-ce que l’utilisation d’une paire de sockets ?

小老鼠
小老鼠original
2023-09-15 16:33:411034parcourir

socketpair est une fonction utilisée pour créer une paire de sockets connectées les unes aux autres. Il est largement utilisé dans les systèmes Unix pour la communication inter-processus (IPC) au sein du même processus. Le prototype de sa fonction est "int socketpair(int domain, int type, int protocol, int sv[2]);". Le socket créé par cette fonction peut réaliser une communication bidirectionnelle entre les processus et peut être utilisé pour implémenter des fonctions telles que la transmission de données, la synchronisation et la notification entre les processus.

Qu’est-ce que l’utilisation d’une paire de sockets ?

socketpair est une fonction utilisée pour créer une paire de sockets connectées entre elles. Il est largement utilisé dans les systèmes Unix pour la communication inter-processus (IPC) au sein du même processus. Le prototype de la fonction

socketpair est le suivant :

int socketpair(int domain, int type, int protocol, int sv[2]);

Description du paramètre :

- domain : précise la famille de protocoles du socket, généralement AF_UNIX.

- type : Spécifie le type de socket, généralement SOCK_STREAM (socket de streaming) ou SOCK_DGRAM (socket de datagramme).

- protocol : Spécifie le protocole du socket, généralement 0.

- sv : Le descripteur de fichier utilisé pour stocker le socket créé.

La valeur de retour de la fonction socketpair est 0 en cas de succès et -1 en cas d'échec.

Utilisez la fonction socketpair pour créer une paire de sockets connectées, qui peuvent être utilisées pour la communication inter-processus. L’une des sockets de la paire est utilisée pour lire des données et l’autre pour écrire des données. Dans le même processus, vous pouvez utiliser cette paire de sockets pour la communication inter-processus afin de réaliser la transmission de données entre les processus.

Ce qui suit est un exemple d'utilisation de la fonction socketpair pour la communication inter-processus :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
int main() {
    int sv[2];
    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sv) == -1) {
        perror("socketpair");
        exit(1);
    }
    pid_t pid = fork();
    if (pid == -1) {
        perror("fork");
        exit(1);
    }
    else if (pid == 0) {
        // 子进程
        close(sv[0]); // 关闭子进程中的读取套接字
        char *message = "Hello from child process!";
        if (write(sv[1], message, strlen(message)) == -1) {
            perror("write");
            exit(1);
        }
        close(sv[1]); // 关闭子进程中的写入套接字
        exit(0);
    }
    else {
        // 父进程
        close(sv[1]); // 关闭父进程中的写入套接字
        char buffer[1024];
        if (read(sv[0], buffer, sizeof(buffer)) == -1) {
            perror("read");
            exit(1);
        }
        printf("Message from child process: %s\n", buffer);
        close(sv[0]); // 关闭父进程中的读取套接字
        exit(0);
    }
}

Dans cet exemple, la fonction socketpair est d'abord appelée pour créer une paire de sockets, puis un processus enfant est créé via la fonction fork. Dans le processus enfant, le socket de lecture est fermé, puis la fonction d'écriture est utilisée pour écrire des données sur le socket d'écriture. Dans le processus parent, le socket d'écriture est fermé et les données sont lues à partir du socket de lecture à l'aide de la fonction de lecture.

Le socket créé via la fonction socketpair peut réaliser une communication bidirectionnelle entre les processus et peut être utilisé pour implémenter des fonctions telles que la transmission de données, la synchronisation et la notification entre les processus. Dans des applications pratiques, la fonction socketpair peut être utilisée pour la communication inter-processus en fonction de besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn