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);
}
}