don't exit when device goes down

pull/28/head
ajneu 2016-08-30 20:04:39 +02:00
parent 42ee04ff64
commit 7a9e10173a
1 changed files with 11 additions and 1 deletions

View File

@ -120,6 +120,7 @@ void print_usage(char *prg)
fprintf(stderr, " -L (use log file format on stdout)\n");
fprintf(stderr, " -n <count> (terminate after receiption of <count> CAN frames)\n");
fprintf(stderr, " -r <size> (set socket receive buffer to <size>)\n");
fprintf(stderr, " -D (Don't exit if a \"detected\" can device goes down.\n");
fprintf(stderr, " -d (monitor dropped CAN frames)\n");
fprintf(stderr, " -e (dump CAN error frames in human-readable format)\n");
fprintf(stderr, " -x (print extra message infos, rx/tx brs esi)\n");
@ -207,6 +208,7 @@ int main(int argc, char **argv)
int bridge = 0;
useconds_t bridge_delay = 0;
unsigned char timestamp = 0;
unsigned char down_causes_exit = 1;
unsigned char dropmonitor = 0;
unsigned char extra_msg_info = 0;
unsigned char silent = SILENT_INI;
@ -242,7 +244,7 @@ int main(int argc, char **argv)
last_tv.tv_sec = 0;
last_tv.tv_usec = 0;
while ((opt = getopt(argc, argv, "t:ciaSs:b:B:u:ldxLn:r:heT:?")) != -1) {
while ((opt = getopt(argc, argv, "t:ciaSs:b:B:u:lDdxLn:r:heT:?")) != -1) {
switch (opt) {
case 't':
timestamp = optarg[0];
@ -329,6 +331,10 @@ int main(int argc, char **argv)
log = 1;
break;
case 'D':
down_causes_exit = 0;
break;
case 'd':
dropmonitor = 1;
break;
@ -643,6 +649,10 @@ int main(int argc, char **argv)
nbytes = recvmsg(s[i], &msg, 0);
if (nbytes < 0) {
if ((errno == ENETDOWN) && !down_causes_exit) {
fprintf(stderr, "read: %s \t\t(not exiting because of -D flag)\n", strerror(errno));
continue;
}
perror("read");
return 1;
}