Bonjour tout le monde,

j'ai un petit souci avec l'utilisation de la primitive select() des sockets.

J'aimerais créer un serveur qui recoit des lignes de textes de plusieurs clients.

Pour le moment j'arrive à me connecter avec un seul client. Les clients suivants ne sont pas acceptés par le serveur et j'ai un doute sur mon utilisation de select()

Est ce que vous pourriez vérifier si je l'utilise bien ? Bonne soirée tout le monde.

Voici le code :

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
	//ON CREER LA SOCKET
	if((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))<0)
	{
		perror("erreur création socket") ;
		exit(-4) ;
 
	}
	printf("Serveur TALK lancé sur le port %s \n", argv[1]) ;
 
	//ON LIE LA SOCKET A LA STRUCTURE SOCKADDR
	if(bind(s,(struct sockaddr *) &serv,sizeof(serv))<0)
	{
		perror("erreur socket") ;
		exit(-5) ;
	}
 
 
 
	//ON LIMITE LE NOMBRE DE CONNEXION A 5
	if(listen(s,5)<0)
	{
		perror("erreur listen") ;
		exit(-6) ;		
	}
 
	while(1)
	{
		if ((a[nb] = accept(s,(struct sockaddr *)&client,&lg))==-1)
		{
			perror("erreur accept") ;
			exit(-7) ;
		}
		else
		{
			printf("client accepté\n") ;
			FD_SET(a[nb], &readfds) ;
			nb++ ;
 
		}
 
 
 
		fd_set readfds2 = readfds ;
		nr = select(nfds, &readfds2,0,0,0) ;
 
 
		for(k=0 ; k<nb ; k++)
		{
			if(FD_ISSET(a[k],&readfds2))
			{
			//printf("client numero %d\n", k) ;
 
			while(read(a[k],&buf, 1)>0)
			write(1,&buf,1) ;
 
			}
		}
 
 
 
	}