Bonjour à tous

Je programme un peu en C et je me suis mis au C++ depuis une semaine.
Je suis en stage et je dois travailler sur une application afin de réceptionner des datas via UDP.

Voici ce que j'ai pour l'instant (c'est un gros du copier/coller du site de MSDN ) :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void main()
{
 
	WSADATA wsaData;
	SOCKET RecvSocket;
	sockaddr_in RecvAddr;
	int i=0;
	int j=0;
	int Port = 5000;
	int  BufLen = 1024;
	char RecvBuf[1024];
	sockaddr_in SenderAddr;
	int SenderAddrSize = sizeof(SenderAddr);
 
  //-----------------------------------------------
  // Initialize Winsock
	WSAStartup(MAKEWORD(2,2), &wsaData);
 
  //-----------------------------------------------
  // Create a receiver socket to receive datagrams
	RecvSocket = socket(AF_INET, SOCK_DGRAM, 0);
 
  //-----------------------------------------------
  // Bind the socket to any address and the specified port.
	RecvAddr.sin_family = AF_INET;
	RecvAddr.sin_port = htons(Port);
	RecvAddr.sin_addr.s_addr = INADDR_ANY;
 
	bind(RecvSocket, (SOCKADDR *) &RecvAddr, sizeof(RecvAddr));
 
  //-----------------------------------------------
  // Call the recvfrom function to receive datagrams
  // on the bound socket.
	for(j=0;j<256;j++)
	{
                printf("Receiving datagrams...\n");
		recvfrom(RecvSocket, (char*)RecvBuf, BufLen, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize);
		parse((char*)RecvBuf,BufLen);
		printf("\n");
	}
 
  //-----------------------------------------------
  // Close the socket when finished receiving datagrams
	printf("Finished receiving. Closing socket.\n");
	closesocket(RecvSocket);
 
  //-----------------------------------------------
  // Clean up and exit.
	printf("Exiting.\n");
	WSACleanup();
	return;
}
- La fonction parse est ma fonction qui s'occupe de gérer les packet et de faire tout ce qu'il faut avec.
- La boucle for contenant le recvfrom sera remplacée par la suite par une boucle while avec les conditions adéquates.

Mon problème est le suivant :
Je souhaite récupérer l'intégralité des packets et en perdre un minimum (aucun serait évidemment l'idéal) avec un minimum de latence. La première idée qui a été développée est d'utiliser une horloge pour récupérer les packets tous les x ms synchronisées avec l'envoi par le client mais je souhaiterais pouvoir scruter la socket et récupérer le packet dès qu'il est arrivé complet sur la socket. Ainsi je pourrais me débarrasser de l'horloge et récupérer l'intégralité de mes packets sans en perdre.

Savez-vous ce que je peux utiliser pour remplacer ou compléter mon recvfrom afin d'attendre qu'un packet complet soit arrivé pour le récupérer et exécuter la fonction parse ?

Merci à tous

Thomas