Salut,

J'ai un probleme avec la fonction select
Ma fonction est "en attente" de reception (mais non bloquante).
Voici son 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
/* 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);
	}
}
Le code n'est bien evidemment qu'en phase d'approche
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
FD_ZERO(&(pData->monFds));
FD_SET(pData->maSocket,&(pData->monFds));
Voici la structure data :
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;
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
Merci pour votre aide
Sorry