0

vcan0 インターフェイスから can トラフィックを受信する C プログラムを開発しました。

受信時にタイムアウトを追加したいと思います。つまり、この間にデータを受信せずにタイムアウトが期限切れになった場合 (たとえば 10 秒)、「10 秒間データを受信しませんでした」と出力し、PC を再起動します (再起動します)。特定の条件が満たされた場合に作成されます)。

選択機能でテストしましたが、タイムアウトが発生しましたが、特定の条件が満たされない場合、トラフィックを受信できなくなりました。

タイムアウトして特定の条件が満たされない場合に、受信を再アクティブ化するために何かを追加する必要がありますか? はいの場合、どのように?

私のプログラムは次のようなものです:

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

0 に答える 0