cs_lapinfroid
Messages postés8Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 2 mai 2007
-
2 mars 2006 à 11:32
CoyoteVsBeepBeep
Messages postés41Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 3 mars 2006
-
3 mars 2006 à 14:20
Bonjour a tous ,
c'est la premiere fois que je poste sur ce forum
Donc si jamais je ne respecte pas toutes les regles n'hesitez pas a me le signaler
Voici mon probleme
j'essaye de creer en C un serveur TCP qui va recevoir 2 connexions clients simultanées
ces deux connexions doivent etre gérées independemment l'une de l'autre mais en meme temps
c'est pour cela que j'ai pensé aux threads
mon probleme est : mon application se termine car la fonction accept des threads "serveurs" n'est pas bloquante
mon programme n'arrive pas jusqu'a la fonction accept
if(pthread_create(&num_thread_4444,NULL,multiserverthread4444,NULL)==-1){
perror("pb de creation du thread num_thread_4444");
}
printf("creation du thread 4444 reussi\n");
if(pthread_create(&num_thread_4445,NULL,multiserverthread4445,NULL)==-1){
perror("pb de creation du thread num_thread_4445");
}
printf("creation du thread 4445 reussi\n");
return(1);
}
/*------------------------------------------------------------------------------
void multiserverthread4444()
Action : Fonction protocole d'echange avec le logiciel
- Récupération des parametres de l'acquisition
if(newsock4444 < 0) {
printf("Erreur lors de la creation de la socket sur le port 4444 \n");
}
if (fork() > 0){
printf("Connexion avec le logiciel sur le port 4444 \n");
// discussion4444(newsock4444);
printf ("Connexion avec le thread sur le port 4444 reussie\n");
}
}
/*------------------------------------------------------------------------------
void multiserverthread4445()
Action : Fonction protocole d'echange avec le distributeur
- Récupération des parametres de l'acquisition
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 3 mars 2006 à 03:30
je connai pas trop les socket en C, mais a premiere vue, je me demande pourquoi tu ne fait pas le accept() dans ton processus principal, et tu redistribue les sockets aux threads.
CoyoteVsBeepBeep
Messages postés41Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 3 mars 2006 3 mars 2006 à 14:18
dans ton process principal, tu peux éviter de quitter ton programme si tes thread ne sont pas terminé avec un while.
Pour savoir si un thread est fini, tu peux faire:
unsigned long ExitCode;
if(GetExitCodeThread(threat_handle,&ExitCode))
{
//on traite la valeur retourné par le thread
if(ExitCode==0)
{
//le thread est fini
}
else
{
//il y a eu une erreur dans le thread
}
}
dans ton thread, tu met:
ExitThread(status); //status = 0 pour ok -1 pour une erreur, ...
CoyoteVsBeepBeep
Messages postés41Date d'inscriptionjeudi 16 juin 2005StatutMembreDernière intervention 3 mars 2006 3 mars 2006 à 14:20
ha oui, j'ai oublié,
la remarque de Guillemouze est bonne.
si tu veux ne veux pas que le accept() soit bloquant, fait des threads, mais dans ton cas, ca a pas l'air utile puisque au contraire, tu veux pas sortir de ton prog.
pour le GetExitCodeThread, fait le dans un timer par exemple