Salut,
J'ai un probleme avec la fonction select
Ma fonction est "en attente" de reception (mais non bloquante).
Voici son code :
Le code n'est bien evidemment qu'en phase d'approche
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 /* Fonction en attente de reception d'un message sous la forme login : message */ void receive(gpointer donnees) { data* pData = donnees; if ( pData->verifConnect == 1 ) { struct timeval tv; int retselect; printf("Deb fonction\n"); FD_ZERO(&(pData->monFds)); FD_SET(pData->maSocket,&(pData->monFds)); memset(&tv, 0, sizeof(tv)); retselect = select((pData->maSocket) + 1,&(pData->monFds),NULL,NULL,&tv); printf("reselect = %d\n",retselect); } }
voici le probleme : dèsque j'envoie un message, retselect passe à 1 (ok jusqu'ici tout va bien) mais il le reste indefinement pour chaque appel de la fonction
Pourtant le fds de lecture est bien réinitialisé avant chaque appel à select :
Voici la structure data :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 FD_ZERO(&(pData->monFds)); FD_SET(pData->maSocket,&(pData->monFds));
Je n'arrive pas à comprendre pourquoi le fds n'est pas correctement réinitialisé, ou alors pourquoi select renvoie toujours 1, alors que je n'envoie qu'UN seul message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { GtkWidget *pFenetre; /* Fenetre principale */ /* ... */ SOCKET maSocket; fd_set monFds; int verifConnect; /* 1 ==> connecté au serveur, sinon 0 */ }data;
Merci pour votre aide
Sorry
Partager