diff options
Diffstat (limited to 'src/tools/oping/oping_server.c')
| -rw-r--r-- | src/tools/oping/oping_server.c | 42 |
1 files changed, 26 insertions, 16 deletions
diff --git a/src/tools/oping/oping_server.c b/src/tools/oping/oping_server.c index 5cc347cb..c1d5e6e5 100644 --- a/src/tools/oping/oping_server.c +++ b/src/tools/oping/oping_server.c @@ -1,10 +1,10 @@ /* - * Ouroboros - Copyright (C) 2016 - 2020 + * Ouroboros - Copyright (C) 2016 - 2024 * * Ouroboros ping application * - * Dimitri Staessens <dimitri.staessens@ugent.be> - * Sander Vrijders <sander.vrijders@ugent.be> + * Dimitri Staessens <dimitri@ouroboros.rocks> + * Sander Vrijders <sander@ouroboros.rocks> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -36,6 +36,8 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ + #include <ouroboros/hash.h> + void shutdown_server(int signo, siginfo_t * info, void * c) { (void) info; @@ -61,16 +63,21 @@ void * cleaner_thread(void * o) while (true) { clock_gettime(CLOCK_REALTIME, &now); - pthread_mutex_lock(&server.lock); + for (i = 0; i < OPING_MAX_FLOWS; ++i) - if (fset_has(server.flows, i) && - ts_diff_ms(&server.times[i], &now) > deadline_ms) { - printf("Flow %d timed out.\n", i); - fset_del(server.flows, i); - flow_dealloc(i); + if (fset_has(server.flows, i)) { + time_t diff; + + pthread_mutex_lock(&server.lock); + diff = ts_diff_ms(&now, &server.times[i]); + pthread_mutex_unlock(&server.lock); + + if (diff > deadline_ms) { + printf("Flow %d timed out.\n", i); + fset_del(server.flows, i); + flow_dealloc(i); + } } - - pthread_mutex_unlock(&server.lock); sleep(1); } } @@ -95,13 +102,15 @@ void * server_thread(void *o) if (msg_len < 0) continue; + if (!server.quiet) + printf("Received %d bytes on fd %d.\n", + msg_len, fd); + if (ntohl(msg->type) != ECHO_REQUEST) { printf("Invalid message on fd %d.\n", fd); continue; } - printf("Received %d bytes on fd %d.\n", msg_len, fd); - clock_gettime(CLOCK_REALTIME, &now); pthread_mutex_lock(&server.lock); @@ -131,16 +140,17 @@ void * accept_thread(void * o) while (true) { fd = flow_accept(&qs, NULL); if (fd < 0) { - printf("Failed to accept flow.\n"); - break; + printf("Failed to accept flow: %d \n", fd); + continue; } printf("New flow %d.\n", fd); clock_gettime(CLOCK_REALTIME, &now); - pthread_mutex_lock(&server.lock); fset_add(server.flows, fd); + + pthread_mutex_lock(&server.lock); server.times[fd] = now; pthread_mutex_unlock(&server.lock); |
