summaryrefslogtreecommitdiff
path: root/src/tools/oping
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/oping')
-rw-r--r--src/tools/oping/oping.c17
-rw-r--r--src/tools/oping/oping_server.c13
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);