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);  | 
