From 2558ab4d93cae6ca5d5d22923b06ce7c85b28f7d Mon Sep 17 00:00:00 2001 From: hartkopp Date: Wed, 11 Mar 2009 11:02:49 +0000 Subject: [PATCH] Added signal handler (from Andre Naujoks) and read exit condition. git-svn-id: svn://svn.berlios.de//socketcan/trunk@962 030b6a49-0b11-0410-94ab-b0dab22257f2 --- test/tst-bcm-server.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/test/tst-bcm-server.c b/test/tst-bcm-server.c index 9898998..c738ea0 100644 --- a/test/tst-bcm-server.c +++ b/test/tst-bcm-server.c @@ -105,9 +105,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -120,6 +122,11 @@ #define MAXLEN 100 #define PORT 28600 +void childdied(int i) +{ + wait(NULL); +} + int main(int argc, char **argv) { @@ -132,6 +139,8 @@ int main(int argc, char **argv) struct ifreq ifr; fd_set readfds; socklen_t sin_size = sizeof(clientaddr); + struct sigaction signalaction; + sigset_t sigset; char buf[MAXLEN]; char rxmsg[50]; @@ -141,6 +150,12 @@ int main(int argc, char **argv) struct can_frame frame; } msg; + sigemptyset(&sigset); + signalaction.sa_handler = &childdied; + signalaction.sa_mask = sigset; + signalaction.sa_flags = 0; + sigaction(SIGCHLD, &signalaction, NULL); /* signal for dying child */ + if((sl = socket(PF_INET, SOCK_STREAM, 0)) < 0) { perror("inetsocket"); exit(1); @@ -232,8 +247,8 @@ int main(int argc, char **argv) char cmd; int items; - if (read(sa, buf+idx, 1) != 1) - continue; + if (read(sa, buf+idx, 1) < 1) + exit(1); if (!idx) { if (buf[0] == '<') -- 2.39.2