Bonjour;

En faite j'ai un petit soucis à implémenter la fonction select() pour qu'elle repond à mes attentes:
On a 2 machines A et B.
A envoie des pings à B, j'ai tapé dans la machine B le code nfq_test.c qui me permet de visulaiser les pings reçues de A, après je voulais modifier ce fichier (nfq_test.c)afin que si A arrete d'envoyer les pings à B, B le saura apres X secondes (j ai mis X=5 ) alors B bloque A.

Le code ci-dessous montre :
des qu'on reçoit le premier paquet, le timer s'enclanche et bloque la machine A au bout de 5s même si elle envoie toujours des ping.

Ce que je veux : des que la machine A arrête d'envoyer des ping, le timer de select s'enclanche et au bout de 5s bloque A. (sauf si A renvoie des paquets dans un délai inférieur à 5s)


Voila le 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
18
19
20
21
22
23
24
25
26
fd_set rfds;
    struct timeval tv;
    int retval;
 
    FD_ZERO(&rfds);
    FD_SET(fd, &rfds);
    /* Pendant 5 secondes maxi */
    tv.tv_sec = 5;
    tv.tv_usec = 0;
	retval = select(fd+1, &rfds, NULL, NULL, &tv);
 
  while(retval){
 
	if((rv = recv(fd, buf, sizeof(buf), 0)) && rv >= 0) {    
		printf("pkt received\n");
		nfq_handle_packet(h, buf, rv);
		retval = select(fd+1, &rfds, NULL, NULL, NULL);}
	else {   
 
		printf("wait for packet");
		retval = select(fd+1, &rfds, NULL, NULL, &tv);
		}
	}
 
	printf("unbinding from queue 0\n");
	nfq_destroy_queue(qh);

Merci