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
Partager