Я использую select()
на платформе Linux / ARM, чтобы узнать, получил ли сокет udp пакет. Я хотел бы знать, сколько времени осталось в вызове select, если он возвращается до истечения времени ожидания (обнаружив пакет).
Что-то вроде:
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);
}
}