Bonjour à tous ,
J'ai un petit souci sur un programme assez basique, il s'agit d'un peer to peer maison...mon programme lance un tracker qui distribue les rôles à tous les clients...
Le système d'écoute du tracker est basé sur un select qui ensuite lance des threads quand il lit quelquechose sur le socket écouté. Le problème est qu'il me lance beaucoup trop de threads. En le testant avec un client qui ne lui envoie qu'un seul message UDP, il me lance plus de 40 threads, donc j'ai du faire une énorme bourde dans mon code mais je ne la voit pas...ou alors il manque une fonction que je ne connais pas...
Voici la partie du code incriminé.
Merci d'avance !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 while(nb_clients!=0) { /* On initialise le select sur sock_UDP */ FD_ZERO(&lect); FD_SET(sock_UDP,&lect); if((sel=select(sock_UDP+1,&lect,0,0,NULL))<0) { perror("tracker:select"); return -1; } if (FD_ISSET(sock_UDP,&lect)) { pthread_t tid; if(pthread_create(&tid,NULL,gestion_UDP,NULL)<0) { perror("tracker:thread"); return -1; } } }
Partager