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'acceptation
Modifier 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 */ ;