summaryrefslogtreecommitdiff
path: root/src/tools/oping/oping_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/oping/oping_server.c')
-rw-r--r--src/tools/oping/oping_server.c42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/tools/oping/oping_server.c b/src/tools/oping/oping_server.c
index 391da197..6f76869c 100644
--- a/src/tools/oping/oping_server.c
+++ b/src/tools/oping/oping_server.c
@@ -1,10 +1,10 @@
/*
- * Ouroboros - Copyright (C) 2016 - 2018
+ * 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
@@ -61,16 +61,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(&server.times[i], &now);
+ 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);
}
}
@@ -96,10 +101,13 @@ void * server_thread(void *o)
continue;
if (ntohl(msg->type) != ECHO_REQUEST) {
- printf("Invalid message on fd %d.", fd);
+ printf("Invalid message on fd %d.\n", fd);
continue;
}
+ if (!server.quiet)
+ printf("Received %d bytes on fd %d.\n", msg_len, fd);
+
clock_gettime(CLOCK_REALTIME, &now);
pthread_mutex_lock(&server.lock);
@@ -118,9 +126,9 @@ void * server_thread(void *o)
void * accept_thread(void * o)
{
- int fd;
+ int fd;
struct timespec now;
- qosspec_t qs;
+ qosspec_t qs;
(void) o;
@@ -137,12 +145,14 @@ void * accept_thread(void * o)
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);
- fccntl(fd, FLOWSFLAGS, FLOWFRNOBLOCK | FLOWFRDWR);
+ fccntl(fd, FLOWSFLAGS,
+ FLOWFRNOBLOCK | FLOWFRDWR | FLOWFRNOPART);
}
return (void *) 0;