From 7a9e10173a48402efc8ebc9deda1fbe4803fa4d4 Mon Sep 17 00:00:00 2001 From: ajneu Date: Tue, 30 Aug 2016 20:04:39 +0200 Subject: [PATCH] don't exit when device goes down --- candump.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/candump.c b/candump.c index 5daf622..d33ef0c 100644 --- a/candump.c +++ b/candump.c @@ -120,6 +120,7 @@ void print_usage(char *prg) fprintf(stderr, " -L (use log file format on stdout)\n"); fprintf(stderr, " -n (terminate after receiption of CAN frames)\n"); fprintf(stderr, " -r (set socket receive buffer to )\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; }