J'utilise select()
sur une plate-forme Linux/ARM pour voir si un socket udp a reçu un paquet. Je voudrais savoir combien de temps il restait dans l'appel select s'il revenait avant le timeout (ayant détecté un paquet).Temps restant sur un appel select()
Quelque chose le long des lignes de: fonction
int wait_fd(int fd, int msec)
{
struct timeval tv;
fd_set rws;
tv.tv_sec = msec/1000ul;
tv.tv_usec = (msec % 1000ul) * 1000ul;
FD_ZERO(& rws);
FD_SET(fd, & rws);
(void)select(fd + 1, & rws, NULL, NULL, & tv);
if (FD_ISSET(fd, &rws)) { /* There is data */
msec = (tv.tv_sec * 1000) + (tv.tv_usec/1000);
return(msec?msec:1);
} else { /* There is no data */
return(0);
}
}
Je ne suis pas sûr de savoir quelle est votre question. Votre code résout le problème; Le temps restant est écrit dans le paramètre timeout. Quoth select (2): "Sous Linux, select() modifie le timeout pour refléter le temps non dormi, la plupart des autres implémentations ne le font pas (POSIX.1-2001 autorise l'un ou l'autre comportement.)" – phihag
@phihag: "permis soit comportement "... regardant exactement la valeur de timeout après un appel select est non-portable –