Créer un serveur TCP/IP multi-thread

Problème

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

Solution

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

Discussion

La programmation d’un serveur TCP/IP multi-thread peut se faire de plusieurs manières. La plus simple consiste à s’inspirer du code d’un serveur TCP/IP multi-processus. Les threads présentent, contrairement aux processus, l’avantage de coûter moins cher au processeur en termes de ressources, et en paramétrant le thread pour qu’il soit détaché, il n’y a pas besoin d’obtenir son code retour, donc pas de balayette à threads zombies à implémenter.

L’exemple ci-dessous imite l’implémentation de la recette précédente en utilisant les threads.


#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/socket.h> 
#include <sys/types.h> 
#include <netinet/in.h> 
#include <pthread.h> 
 
int 
create_tcp_server (int port, int nb_max_clients) 
{ 
/* Voir le code dans la recette "Créer un serveur...
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
Créer un serveur TCP/IP multi-processus
Suivant
Créer un serveur TCP/IP mono-processus sans thread