如何在接收时制定超时?

时间:2015-10-21 08:43:56

标签: c linux can-bus canutils

我开发了一个C程序,可以从vcan0接口接收流量。

我想在接收时添加超时,我的意思是当超时到期时(例如10秒),在此期间没有收到数据,我打印“10秒内没有收到数据”,我重新启动了我的电脑(如果满足特定条件,则重新启动。)

我已经使用select函数进行了测试我得到了超时但是当特定条件不满意时我再也无法收到流量了。

当我超时并且不满足特定条件时,我应该添加一些用于重新激活接收的内容吗?如果是的话怎么样?

我的程序是这样的:

...
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*/
        }
}
...

0 个答案:

没有答案