diff --git a/canlogserver.c b/canlogserver.c index 3e9c44f..abc62b4 100644 --- a/canlogserver.c +++ b/canlogserver.c @@ -177,7 +177,8 @@ int main(int argc, char **argv) sigset_t sigset; fd_set rdfs; int s[MAXDEV]; - int socki, accsocket; + int socki; + int accsocket = -1; canid_t mask[MAXDEV] = {0}; canid_t value[MAXDEV] = {0}; int inv_filter[MAXDEV] = {0}; @@ -286,7 +287,7 @@ int main(int argc, char **argv) inaddr.sin_addr.s_addr = htonl(INADDR_ANY); inaddr.sin_port = htons(port); - while(bind(socki, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) { + while(running && bind(socki, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) { struct timespec f = { .tv_nsec = 100 * 1000 * 1000, }; @@ -295,12 +296,17 @@ int main(int argc, char **argv) nanosleep(&f, NULL); } + if (!running) { + close(socki); + return 128 + signal_num; + } + if (listen(socki, 3) != 0) { perror("listen"); exit(1); } - while(1) { + while(running) { accsocket = accept(socki, (struct sockaddr*)&clientaddr, &sin_size); if (accsocket > 0) { //printf("accepted\n"); @@ -314,6 +320,11 @@ int main(int argc, char **argv) } } + if (!running) { + close(socki); + return 128 + signal_num; + } + for (i=0; i