Bonjour,

je suis entrain de faire un Tchat en TCP. Le serveur doit pouvoir accepter plusieurs connections de clients. Pour celà j'utilise la fonction select() mais je ne suis pas certain de savoir commet elle fonctionne ... il faut la mettre avant le accept() ? après ?

voici mon serveur, si vous pouviez m'éclairer ça seait sympa.

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include "fonc_socket.h"
 
 
int main(char * argv[], int argc)
{
	int s_ecoute = createBindInetSocket(SOCK_STREAM,1234) ;
	char c ;
	struct sockaddr_in client;
	struct hostent * h ;
	int fd ;
 
	int lg = sizeof(struct sockaddr_in) ;
 
 
 
	if (listen(s_ecoute,10)<0)
	{
		perror("erreur listen") ;
		return(-2) ;
 
	}
	else
	{	printf("listen réussi \n") ;
		//printf("Serveur lancé ! En attente de messages ...\n") ;
 
 
		fd_set fdread ;
		int ret ;
 
		while(1)
		{
 
 
			FD_ZERO (&fdread) ;
			FD_SET(s_ecoute, &fdread) ; 
 
			if ((ret=select(0,&fdread,NULL,NULL,NULL))==-1)
			{
				perror("erreur select") ;
				exit(-2) ;
 
			}
			else
			printf("select reussi\n") ;					
 
			if(FD_ISSET(s_ecoute, &fdread))
			{
 
				if ((fd=accept(s_ecoute, (struct sockaddr *)&client,&lg))==-1)
				{
					perror("erreur accept") ;
					return(-1) ;
 
				}	
				else
				{	
					printf("accept reussi\n") ;
 
 
					while(read(fd,&c,1)!=0)
					write(1,&c,1) ;
				}
			}	
 
		}
 
 
	}
 
 
 
 
 
 
 
 
 
	close(s_ecoute) ;
	return 0 ;
}