Passage de paramètres dans un thread
Bonjour,
je dois réaliser un serveur de fichiers. Pour celà j'ai opté pour créer un thread spécifique à chaque client qui se connecte. Dans ce thread le serveur initialise une deuxieme connection TCP qui permettra le transferts des fichiers. Cependant j'ai un souci au niveau du passage de paramètre. Je fais un affichage de la struct sockaddr du client dans le main puis lorsque je fais le meme affichage dans le thread les données sont différentes. Exemple :
/\/\/\ SERVEUR FTP LANCE /\/\/\
NOUVEAU CLIENT ACCEPTE 0.0.0.0 0 //affichage dans le main pour le 1er client
addr 0.0.0.0.62135 //affichage dans le thread pour le 1er client
NOUVEAU CLIENT ACCEPTE 127.0.0.1 56336 //affichage dans le main pour 2e
addr 0.0.0.0.62135 //affichage dans le thread pr le 2e
NOUVEAU CLIENT ACCEPTE 127.0.0.1 53956
addr 0.0.0.0.62135
je peux lancer autant de client que je veux le thread spécifique au client affichera toujours addr 0.0.0.0.62135
voici une partie de mon main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| while(1)
{
int desc ;
int descbis ;
if ((desc = accept(s,(struct sockaddr *)client,&lg))==-1)
{
perror("ERREUR ACCEPT") ;
exit(-7) ;
}
else
{
char rep[50] ;
getcwd(rep,49) ;
Client c = creerClient(desc,client, rep) ;
//ajoutClient(liste, c) ;
printf("NOUVEAU CLIENT ACCEPTE %s %d \n",inet_ntoa(client->sin_addr), ntohs(client->sin_port) ) ;
pthread_t fils ;
if (pthread_create(&fils, NULL, threadClient, c))
{
perror("pthread_create");
exit(EXIT_FAILURE);
}
free(client) ;
}
} |
la structure pour le passage de parametre :
Code:
1 2 3 4 5 6 7 8
| typedef struct client
{
int socketCommande ;
int socketTransfert ;
char * repertoireCourant ;
struct sockaddr_in * ip ;
struct client * suivant ;
}Client; |
et l'affichage dans le thread :
Code:
1 2 3 4 5 6 7 8 9
| void * threadClient(struct client l)
{
DIR * rep ;
int s2 ;
printf(" %s.%d\n", inet_ntoa(l.ip->sin_addr), ntohs(l.ip->sin_port)) ; |
si vous pouviez m'éclairer ça serait génial bonne journée à tous