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) ;
}
}
} |
Partager