Créer un serveur TCP/IP multi-processus

Problème

Vous souhaitez créer un serveur TCP/IP qui crée un processus par connexion.

Solution

Créez un serveur comme décrit dans la première recette, mais effectuez un appel à fork() après chaque appel à accept(). La communication avec le client distant s’effectue dans le processus fils pendant que le processus père continue à écouter pour d’autres tentatives de connexion.

Discussion

La création d’un serveur TCP/IP qui génère un processus par connexion est simple car il suffit de reprendre l’exemple de base de la première recette du chapitre et d’y ajouter un appel à fork() juste après accept(). La seule difficulté consiste à lire le code retour des processus fils au bon moment afin d’éviter la création d’un trop grand nombre de processus zombies. Voici un exemple :


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <sys/wait.h> 
 
int 
create_tcp_server (int port, int nb_max_clients) 
{ 
/* Voir le code dans la recette "Créer un serveur TCP/IP". */ 
} 
 
int 
main () 
{ 
  int socket_id; 
  int client_id; 
  char hello[] = "Bonjour, vous\n"; ...
Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Connaître l'adresse IP d'une machine à partir de son nom
Suivant
Créer un serveur TCP/IP multi-thread