diff options
Diffstat (limited to 'src/tools/oping')
-rw-r--r-- | src/tools/oping/oping.c | 17 | ||||
-rw-r--r-- | src/tools/oping/oping_server.c | 13 |
2 files changed, 20 insertions, 10 deletions
diff --git a/src/tools/oping/oping.c b/src/tools/oping/oping.c index cf8dc485..2871e79e 100644 --- a/src/tools/oping/oping.c +++ b/src/tools/oping/oping.c @@ -60,6 +60,7 @@ struct c { struct s { struct timespec times[OPING_MAX_FLOWS]; + bool flows[OPING_MAX_FLOWS]; pthread_mutex_t lock; pthread_t cleaner_pt; @@ -95,11 +96,7 @@ int main(int argc, char ** argv) int ret = -1; char * rem = NULL; bool serv = false; - - if (ap_init(argv[0])) { - printf("Failed to init AP.\n"); - exit(EXIT_FAILURE); - } + char ** argv_dup = argv; argc--; argv++; @@ -138,8 +135,18 @@ int main(int argc, char ** argv) } if (serv) { + if (ap_init(argv_dup[0])) { + printf("Failed to init AP.\n"); + exit(EXIT_FAILURE); + } + ret = server_main(); } else { + if (ap_init(NULL)) { + printf("Failed to init AP.\n"); + exit(EXIT_FAILURE); + } + if (client.s_apn == NULL) { printf("No server specified.\n"); usage(); diff --git a/src/tools/oping/oping_server.c b/src/tools/oping/oping_server.c index 9e2fa12f..7761110d 100644 --- a/src/tools/oping/oping_server.c +++ b/src/tools/oping/oping_server.c @@ -53,8 +53,11 @@ void * cleaner_thread(void * o) clock_gettime(CLOCK_REALTIME, &now); pthread_mutex_lock(&server.lock); for (i = 0; i < OPING_MAX_FLOWS; ++i) - if (ts_diff_ms(&server.times[i], &now) > deadline_ms) + if (server.flows[i] && + ts_diff_ms(&server.times[i], &now) > deadline_ms) { + server.flows[i] = false; flow_dealloc(i); + } pthread_mutex_unlock(&server.lock); sleep(1); @@ -123,6 +126,7 @@ void * accept_thread(void * o) clock_gettime(CLOCK_REALTIME, &now); pthread_mutex_lock(&server.lock); + server.flows[fd] = true; server.times[fd] = now; pthread_mutex_unlock(&server.lock); @@ -135,6 +139,7 @@ void * accept_thread(void * o) int server_main() { struct sigaction sig_act; + int i = 0; memset(&sig_act, 0, sizeof sig_act); sig_act.sa_sigaction = &shutdown_server; @@ -148,10 +153,8 @@ int server_main() return -1; } - if (api_bind(NULL) < 0) { - printf("Failed to bind the server instance."); - return -1; - } + for (i = 0; i < OPING_MAX_FLOWS; ++i) + server.flows[i] = false; pthread_create(&server.cleaner_pt, NULL, cleaner_thread, NULL); pthread_create(&server.accept_pt, NULL, accept_thread, NULL); |