我开发了一个从 vcan0 接口接收 can 流量的 C 程序。
我想在接收时添加超时,我的意思是当超时过期(例如 10 秒)在此期间没有收到数据时,我打印“10 秒内没有收到数据”并重新启动我的电脑(重启如果满足特定条件,则进行)。
我已经使用选择功能进行了测试,我得到了超时,但是当不满足特定条件时,我无法再接收罐头流量了。
当我超时并且不满足特定条件时,我应该添加一些东西来重新激活接收吗?如果是的话怎么办?
我的程序是这样的:
...
while(1)
{
FD_ZERO(&set); /* clear the set */
FD_SET(filedesc, &set); /* add our file descriptor to the set */
timeout.tv_sec = 0;
timeout.tv_usec = 10000000; // 10 second
rv = select(fd_max + 1, &set, NULL, NULL, &timeout);
if(rv == -1)
perror("select"); /* an error accured */
else if(rv == 0)
{
printf("no data received within 10 second"); /* a timeout occured */
if (specific condition is true)
{
reboot(RB_AUTOBOOT);
}
}
else
int s;
/* loop on all sockets */
for(i=s;i<=fd_max;i++)
{
read( i, buff, len );
/* some other instruction*/
}
}
...