autour de la fonction select() pour gerer le temps
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:
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