Bonjour,

dans mon application cliente (win32 api C/C++) utilisant WSAAsyncSelect et FD_READ donc en non bloquant, je voulais savoir comment faire pour savoir que l'on a reçu toutes les donnees ?

mon client peut se connecter sur n'importe quel serveur, soit web, irc ou autre, je recupere des donnees bruts donc je n'ai pas d'indication que le FD_READ a terminé de lire toutes les donnees.

Le fd_read d'apres ce que j'ai compris est declenché des qu'un caractere est reçu, par exemple si le serveur renvoi "bonjour" le FD_READ se declenche lorsqu'il reçoit le b, le o, n etc.. je recupere chaque caractere dans un buffer et je l'affiche mais je ne peux pas savoir quand le FD_READ a terminé car je dois faire un traitement une fois la lecture de toutes les données terminée.
Je joint le code du FD_READ.
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
 
//On read client
BOOL OnClientFDRead(SOCKET& sock)
{
	if (ClientData != NULL) //If exist clients
	{
		static int retval = 0;
		CDataClient::PDATA_CLIENT pCli;
		if ((pCli = ClientData->GetDataClientFromSocket(sock)) != NULL) //Get infos data from client to read
		{				
			if (pCli->totalBytes >= ClientData->GetBufferSize())
			{				
				g_nError = TRUE;
				LogMessage(COLOR_RED, "Buffer of data to read is to large");
				return FALSE;
			}
 
			unsigned char Buf[10];
			pCli->totalBytes += retval;			
			retval = recv(pCli->sock, (char *)Buf, 1, 0); //Get the text
 
			if( retval == SOCKET_ERROR)
			{
				g_nError = TRUE;
				LogMessageError();				
				return FALSE;
			}
 
			memcpy(&pCli->RecvBuf[pCli->totalBytes], Buf, retval);
			SendToLogMessage(&pCli->RecvBuf[pCli->totalBytes]);	
 
		}
	}
 
	return TRUE;
}
Avez vous une idee ?