/* set de sockets écouteurs */
fd_set fdSetEcouteurs;
/* Controle de la boucle */
int bTourner = 1;
/* Tableau de sockets qui écoutent */
int *skTabEcouteurs = NULL;
/* Effectif du tableau */
int iNbEcouteurs = 0;
/* Retour de select() */
int iRet = 0;
while( bTourner )
{
/* Nettoie le set de descripteurs/sockets */
FDZERO(&fdLecture); FDZERO(&fdEcriture); FDZERO(&fdException);
/* On le remplit avec nos écouteurs */
for (i=0; i < iNbEcouteurs; i++) { FDSET(skTabEcouteurs[i], fdSetEcouteurs); }
/* Select */
iRet = select(i, &fdSetEcouteurs, NULL, NULL, NULL);
/* ^ ^ ^ ^ ^ */
/* nb sockets lecteurs 'écriveurs' exceptions timeout */
/* Dans la pratique, mieux vaux un timeout ;) */
/* (Le nombre de sockets n'est pas nécessaire sous Win32) */
/* On teste si tout s'est bien passé */
if (iRet != 0) { perror("COIN!"); exit(1); }
/* Select a enlevé du set tous les écouteurs qui n'ont rien à dire */
/* On teste donc ce qui reste dans le set de départ */
for (i=0; i < iNbEcouteurs; i++)
{
if( FDISSET(skTabEcouteurs[i], fdSetEcouteurs) )
{
/* Il y a de la lecture sur ce socket */
printf("Le socket %i a quelque chose à dire !\n", i);
}
}
/* Et c'est reparti pour un tour... */
}
# Select
Posté par JaguarWan . En réponse au message Serveur de tchat. Évalué à 2.
/* set de sockets écouteurs */ fd_set fdSetEcouteurs; /* Controle de la boucle */ int bTourner = 1; /* Tableau de sockets qui écoutent */ int *skTabEcouteurs = NULL; /* Effectif du tableau */ int iNbEcouteurs = 0; /* Retour de select() */ int iRet = 0; while( bTourner ) { /* Nettoie le set de descripteurs/sockets */ FDZERO(&fdLecture); FDZERO(&fdEcriture); FDZERO(&fdException); /* On le remplit avec nos écouteurs */ for (i=0; i < iNbEcouteurs; i++) { FDSET(skTabEcouteurs[i], fdSetEcouteurs); } /* Select */ iRet = select(i, &fdSetEcouteurs, NULL, NULL, NULL); /* ^ ^ ^ ^ ^ */ /* nb sockets lecteurs 'écriveurs' exceptions timeout */ /* Dans la pratique, mieux vaux un timeout ;) */ /* (Le nombre de sockets n'est pas nécessaire sous Win32) */ /* On teste si tout s'est bien passé */ if (iRet != 0) { perror("COIN!"); exit(1); } /* Select a enlevé du set tous les écouteurs qui n'ont rien à dire */ /* On teste donc ce qui reste dans le set de départ */ for (i=0; i < iNbEcouteurs; i++) { if( FDISSET(skTabEcouteurs[i], fdSetEcouteurs) ) { /* Il y a de la lecture sur ce socket */ printf("Le socket %i a quelque chose à dire !\n", i); } } /* Et c'est reparti pour un tour... */ }