Merge pull request #28 from ajneu/no_exit_on_down

don't exit when device goes down
pull/29/head
Marc Kleine-Budde 2016-08-31 10:19:56 +02:00 committed by GitHub
commit 8f74b1cc21
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, " -L (use log file format on stdout)\n");
fprintf(stderr, " -n <count> (terminate after receiption of <count> CAN frames)\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, " -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, " -d (monitor dropped CAN frames)\n");
fprintf(stderr, " -e (dump CAN error frames in human-readable format)\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"); 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; int bridge = 0;
useconds_t bridge_delay = 0; useconds_t bridge_delay = 0;
unsigned char timestamp = 0; unsigned char timestamp = 0;
unsigned char down_causes_exit = 1;
unsigned char dropmonitor = 0; unsigned char dropmonitor = 0;
unsigned char extra_msg_info = 0; unsigned char extra_msg_info = 0;
unsigned char silent = SILENT_INI; unsigned char silent = SILENT_INI;
@ -242,7 +244,7 @@ int main(int argc, char **argv)
last_tv.tv_sec = 0; last_tv.tv_sec = 0;
last_tv.tv_usec = 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) { switch (opt) {
case 't': case 't':
timestamp = optarg[0]; timestamp = optarg[0];
@ -329,6 +331,10 @@ int main(int argc, char **argv)
log = 1; log = 1;
break; break;
case 'D':
down_causes_exit = 0;
break;
case 'd': case 'd':
dropmonitor = 1; dropmonitor = 1;
break; break;
@ -643,6 +649,10 @@ int main(int argc, char **argv)
nbytes = recvmsg(s[i], &msg, 0); nbytes = recvmsg(s[i], &msg, 0);
if (nbytes < 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"); perror("read");
return 1; return 1;
} }