unsigned overrun;
unsigned lost;
struct timespec tic, tac;
+ unsigned timeouts;
} stats;
int num_interfaces = 0;
struct timespec timeout;
struct sockaddr_can addr;
sigset_t set;
+ int consecutive_timeouts = 0;
MEMSET_ZERO(pfd);
SEND();
}
} else {
- error(1, 0, "poll timeout");
+ /* Lost message - send a new one */
+ stats.timeouts++;
+ consecutive_timeouts++;
+ if (consecutive_timeouts < 10)
+ SEND();
+ else /* Something is really broken */
+ finish_flag = 1;
}
break;
default: // Event
i = (num_interfaces == 2) ? 1 : 2;
if (pfd[i].revents != 0) {
+ consecutive_timeouts = 0;
process_final_rx(pfd[i].fd);
msg_in_progress--;
pfd[i].revents = 0;
fprintf(opt.f_stat, "lost=%d\n", stats.lost);
if (stats.lost && !opt.quiet)
printf("lost=%d\n", stats.lost);
+ fprintf(opt.f_stat, "timeouts=%d\n", stats.timeouts);
+ if (stats.timeouts && !opt.quiet)
+ printf("timeouts=%d\n", stats.timeouts);
fclose(opt.f_stat);