Bonjour,
je suis en train de travailler sur un code C sous Linux qui fonctionne ainsi :
- Un serveur receptionne par socket des demandes de connections de clients (socket ethernet).
- Lors de la connection d'un client, le serveur crée un fils (fork) qui va s'occuper du dialogue avec le client. Le serveur se remet immédiatement à l'ecoute d'eventuels autres connections de clients.
Jusque là, tout va bien, il s'agit d'un système de serveur-client multi-utilisateur classique.
Ensuite, chaque fils recoit de son client des données qu'il va stocker en local, dans un repertoire spécifique au client. (par exemple, le client 1 va envoyer des données que son fils va stocker dans le repertoire /donnee/1, le client 2 va envoyer des données que son fils va stocker dans le repertoire /donnee/2, etc....)
Sur le code que j'avais, le fils fonctionnais ainsi :
- création du repertoire x dans /donnee (x etant le numero du client)
- deplacement dans le repertoire nouvellement créé ( chdir("/donnee/1/"); par exemple)
- creation du fichier de reception dans le repertoire courant (donc toujours pour le meme exemple /donnee/1/)
- reception des données et ecriture dans le fichier.
Ce code fonctionne bien lorsqu'un seul client se connecte au serveur. Le problème survient lors de la connection simultanée de 2 ou plus clients. Le fils connecté au client 1 créé le repertoire /donnee/1/, le fichier de reception et commence la reception/ecriture des données. Un peu après, le fils connecté au client 2 réalise les memes operations, mais il semblerait qu'a partir du moment où il réalise son propre chdir (positionnement sur le repertoire /donnee/2), la copie des fichiers en provenance du client 1 soit coupée.
Apres plusieurs heures de test et de debuggage, il semblerait que cela vienne effectivement au moment de l'utilisation de la fonction chdir mais je ne comprends pas POURQUOI cela fait planter la connection/copie des fichiers...
Voila, désolé pour le roman mais j'ai essayé de bien retranscrire comment le programme fonctionnait et ce qu'il réalisait. J'ai essayé d'etre aussi clair que possible, je ne suis pas sûr d'y etre arrivé
En vous remerciant d'avance pour votre aide.
Partager