Le TP2 a plusieurs problèmes:
Boucle infini On accepte la connexion. On lance un nouveau processus avec la fonction fork() Si l'on est dans le fils (fork() a retourné 0) ALORS On ferme le socket qui était en attente de connexion On ouvre la connexion en direction du vrai serveur Boucle infini On attend une donnée du vrai client ou vrai serveur Si erreur de lecture On fait un exit(0) pour terminer. On la transmet à l'autre Si erreur d'écriture On fait un exit(0) pour terminer. FIN SI On ferme le socket retourné par l'acceptationModifier le TP2 en conséquence.
Remarque : Le lancement d'une THREAD est plus rapide qu'un processus car rien n'est dupliqué (à part la pile) mais la programmation est plus complexe car le partage de variables nécessite l'utilisation de sémaphores.
Pour éliminer les Zombis, il est intéressant d'ajouter après l'acceptation de connexion :
/* int status */ while ( waitpid(-1, &status, WNOHANG) > 0 ) /* vide */ ;