diff options
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/cbr/cbr.c | 16 | ||||
| -rw-r--r-- | src/tools/cbr/cbr_server.c | 5 | ||||
| -rw-r--r-- | src/tools/echo/echo.c | 24 | ||||
| -rw-r--r-- | src/tools/echo/echo_server.c | 5 | ||||
| -rw-r--r-- | src/tools/irm/CMakeLists.txt | 6 | ||||
| -rw-r--r-- | src/tools/irm/irm.c | 4 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind.c | 87 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind_ap.c | 98 | ||||
| -rw-r--r-- | src/tools/irm/irm_bind_api.c | 68 | ||||
| -rw-r--r-- | src/tools/irm/irm_ipcp.c | 2 | ||||
| -rw-r--r-- | src/tools/irm/irm_ops.h | 10 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind.c | 58 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind_ap.c | 68 | ||||
| -rw-r--r-- | src/tools/irm/irm_unbind_api.c | 69 | ||||
| -rw-r--r-- | src/tools/oping/oping.c | 17 | ||||
| -rw-r--r-- | src/tools/oping/oping_server.c | 13 | 
16 files changed, 437 insertions, 113 deletions
| diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c index 65783119..e42492df 100644 --- a/src/tools/cbr/cbr.c +++ b/src/tools/cbr/cbr.c @@ -72,14 +72,10 @@ int main(int argc, char ** argv)          int    ret = 0;          char * rem = NULL;          char * s_apn = NULL; +        char ** argv_dup = argv;          bool server = false; -        if (ap_init(argv[0]) < 0) { -                printf("Failed to init.\n"); -                exit(EXIT_FAILURE); -        } -          server_settings.interval = 1; /* One second reporting interval */          server_settings.timeout  = 1; @@ -133,8 +129,18 @@ int main(int argc, char ** argv)          }          if (server) { +                if (ap_init(argv_dup[0]) < 0) { +                        printf("Failed to init.\n"); +                        exit(EXIT_FAILURE); +                } +                  ret = server_main();          } else { +                if (ap_init(NULL) < 0) { +                        printf("Failed to init.\n"); +                        exit(EXIT_FAILURE); +                } +                  if (s_apn == NULL) {                          printf("No server specified.\n");                          usage(); diff --git a/src/tools/cbr/cbr_server.c b/src/tools/cbr/cbr_server.c index d0666551..8eff4a4c 100644 --- a/src/tools/cbr/cbr_server.c +++ b/src/tools/cbr/cbr_server.c @@ -219,11 +219,6 @@ int server_main()                  return -1;          } -        if (api_bind(NULL) < 0) { -                printf("Failed to bind the server api."); -                return -1; -        } -          for (i = 0; i < THREADS_SIZE; i++)                  pthread_create(&threads[i], NULL, worker, NULL); diff --git a/src/tools/echo/echo.c b/src/tools/echo/echo.c index ab7d5557..28ae4c1a 100644 --- a/src/tools/echo/echo.c +++ b/src/tools/echo/echo.c @@ -41,19 +41,15 @@ static void usage()  int main(int argc, char ** argv)  {          int ret = -1; -        if (ap_init(argv[0])) { -                printf("Failed to init AP.\n"); -                return -1; -        } +        char ** argv_dup = argv; +        bool server = false;          argc--;          argv++;          while (argc > 0) {                  if (strcmp(*argv, "-l") == 0 ||                      strcmp(*argv, "--listen") == 0) { -                        ret = server_main(); -                        ap_fini(); -                        return ret; +                        server = true;                  } else {                          usage();                          return 0; @@ -62,7 +58,19 @@ int main(int argc, char ** argv)                  argv++;          } -        ret = client_main(); +        if (server) { +                if (ap_init(argv_dup[0])) { +                        printf("Failed to init AP.\n"); +                        return -1; +                } +                ret = server_main(); +        } else { +                if (ap_init(NULL)) { +                        printf("Failed to init AP.\n"); +                        return -1; +                } +                ret = client_main(); +        }          ap_fini(); diff --git a/src/tools/echo/echo_server.c b/src/tools/echo/echo_server.c index 3106ee35..e6ab9cfd 100644 --- a/src/tools/echo/echo_server.c +++ b/src/tools/echo/echo_server.c @@ -39,11 +39,6 @@ int server_main()          char   buf[BUF_SIZE];          ssize_t count = 0; -        if (api_bind(NULL) < 0) { -                printf("Failed to bind the server api."); -                return -1; -        } -          printf("Starting the server.\n");          /* Manual cleanup is required for now */ diff --git a/src/tools/irm/CMakeLists.txt b/src/tools/irm/CMakeLists.txt index 68297615..f59d9af0 100644 --- a/src/tools/irm/CMakeLists.txt +++ b/src/tools/irm/CMakeLists.txt @@ -7,10 +7,16 @@ include_directories(${CMAKE_BINARY_DIR}/include)  set(SOURCE_FILES          # Add source files here          irm.c +        irm_bind_ap.c +        irm_bind_api.c +        irm_bind_ipcp.c          irm_ipcp_create.c          irm_ipcp_destroy.c          irm_ipcp_bootstrap.c          irm_ipcp_enroll.c +        irm_unbind_ap.c +        irm_unbind_api.c +        irm_unbind_ipcp.c          irm_unbind.c          irm_bind.c          irm_ipcp.c diff --git a/src/tools/irm/irm.c b/src/tools/irm/irm.c index 14420207..c260feb9 100644 --- a/src/tools/irm/irm.c +++ b/src/tools/irm/irm.c @@ -46,8 +46,8 @@ static const struct cmd {          int (* func)(int argc, char ** argv);  } cmds[] = {          { "ipcp",            ipcp_cmd }, -        { "bind",            do_bind }, -        { "unbind",          do_unbind }, +        { "bind",            bind_cmd }, +        { "unbind",          unbind_cmd },          { "register",        do_register },          { "unregister",      do_unregister },          { "help",            do_help }, diff --git a/src/tools/irm/irm_bind.c b/src/tools/irm/irm_bind.c index 061aeef5..9b37e800 100644 --- a/src/tools/irm/irm_bind.c +++ b/src/tools/irm/irm_bind.c @@ -1,8 +1,9 @@  /*   * Ouroboros - Copyright (C) 2016   * - * Bind AP to a name + * Bind names in the processing system   * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be>   *    Sander Vrijders   <sander.vrijders@intec.ugent.be>   *   * This program is free software; you can redistribute it and/or modify @@ -21,75 +22,57 @@   */  #include <stdio.h> -#include <string.h>  #include <ouroboros/irm.h> -#include <ouroboros/errno.h>  #include "irm_ops.h"  #include "irm_utils.h"  static void usage()  { -        printf("Usage: irm bind\n" -               "           name <name>\n" -               "           apn <application process name>\n" -               "           [auto] (instantiate apn if not running)\n" -               "           [unique] (there can only be one instantiation)\n" -               "           [-- <application arguments>]\n"); +        printf("Usage: irm bind [OPERATION]\n" +               "where OPERATION = {ap api ipcp help}\n");  } - -int do_bind(int argc, char ** argv) +static int do_help(int argc, char **argv)  { -        char * name = NULL; -        char * ap_name = NULL; -        uint16_t flags = 0; -        int ret = 0; +        usage(); +        return 0; +} -        while (argc > 0) { -                if (matches(*argv, "name") == 0) { -                        name = *(argv + 1); -                        ++argv; -                        --argc; -                } else if (matches(*argv, "apn") == 0) { -                        ap_name = *(argv + 1); -                        ++argv; -                        --argc; -                } else if (strcmp(*argv, "auto") == 0) { -                        flags |= BIND_AP_AUTO; -                } else if (strcmp(*argv, "unique") == 0) { -                        flags |= BIND_AP_UNIQUE; -                } else if (strcmp(*argv, "--") == 0) { -                        ++argv; -                        --argc; -                        break; -                } else { -                        printf("\"%s\" is unknown, try \"irm " -                               "bind\".\n", *argv); -                        return -1; -                } +static const struct cmd { +        const char * cmd; +        int (* func)(int argc, char ** argv); +} cmds[] = { +        { "ap",   do_bind_ap }, +        { "api",  do_bind_api }, +        { "ipcp", do_bind_ipcp }, +        { "help", do_help }, +        { 0 } +}; -                ++argv; -                --argc; -        } +static int do_cmd(const char * argv0, +                  int argc, +                  char ** argv) +{ +        const struct cmd * c; -        if (name == NULL || ap_name == NULL) { -                usage(); -                return -1; +        for (c = cmds; c->cmd; ++c) { +                if (!matches(argv0, c->cmd)) +                        return c->func(argc, argv);          } -        ret = irm_bind(name, ap_name, flags, argc, argv); -        if (ret == -ENOENT) { -                printf("%s does not exist.\n", ap_name); -                return -1; -        } +        fprintf(stderr, "\"%s\" is unknown, try \"irm bind help\".\n", argv0); + +        return -1; +} -        if (ret == -EPERM) { -                printf("Cannot execute %s, please check permissions.\n", -                        ap_name); +int bind_cmd(int argc, char ** argv) +{ +        if (argc < 1) { +                usage();                  return -1;          } -        return ret; +        return do_cmd(argv[0], argc, argv);  } diff --git a/src/tools/irm/irm_bind_ap.c b/src/tools/irm/irm_bind_ap.c new file mode 100644 index 00000000..a525c077 --- /dev/null +++ b/src/tools/irm/irm_bind_ap.c @@ -0,0 +1,98 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Bind AP to a name + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <string.h> + +#include <ouroboros/irm.h> +#include <ouroboros/errno.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm bind ap <ap>\n" +               "           name <name>\n" +               "           [auto] (instantiate apn if not running)\n" +               "           [loc] (location-dependent application)\n" +               "           [unique] (there can only be one instantiation)\n" +               "           [-- <application arguments>]\n"); +} + + +int do_bind_ap(int argc, char ** argv) +{ +        char * name = NULL; +        char * ap_name = NULL; +        uint16_t flags = 0; +        int ret = 0; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "ap") == 0) { +                        ap_name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (strcmp(*argv, "auto") == 0) { +                        flags |= BIND_AP_AUTO; +                } else if (strcmp(*argv, "unique") == 0) { +                        flags |= BIND_AP_UNIQUE; +                } else if (strcmp(*argv, "loc") == 0) { +                        flags |= BIND_AP_LOC; +                } else if (strcmp(*argv, "--") == 0) { +                        ++argv; +                        --argc; +                        break; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "bind\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (name == NULL || ap_name == NULL) { +                usage(); +                return -1; +        } + +        ret = irm_bind_ap(ap_name, name, flags, argc, argv); +        if (ret == -ENOENT) { +                printf("%s does not exist.\n", ap_name); +                return -1; +        } + +        if (ret == -EPERM) { +                printf("Cannot execute %s, please check permissions.\n", +                        ap_name); +                return -1; +        } + +        return ret; +} diff --git a/src/tools/irm/irm_bind_api.c b/src/tools/irm/irm_bind_api.c new file mode 100644 index 00000000..b21d305c --- /dev/null +++ b/src/tools/irm/irm_bind_api.c @@ -0,0 +1,68 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Bind AP-I to a name + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include <ouroboros/irm.h> +#include <ouroboros/errno.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm bind api <pid> name <name>\n"); +} + +int do_bind_api(int argc, char ** argv) +{ +        pid_t api = -1; +        char * name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "api") == 0) { +                        api = strtol(*(argv + 1), NULL, 10); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "bind api\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (api < 0 || name == NULL) { +                usage(); +                return -1; +        } + +        return irm_bind_api(api, name); +} diff --git a/src/tools/irm/irm_ipcp.c b/src/tools/irm/irm_ipcp.c index f658ead5..1b523feb 100644 --- a/src/tools/irm/irm_ipcp.c +++ b/src/tools/irm/irm_ipcp.c @@ -29,7 +29,7 @@ static void usage()  {          printf("Usage: irm ipcp [OPERATION]\n\n"                 "where OPERATION = {create destroy\n" -               "                   bootstrap enroll help\n"); +               "                   bootstrap enroll help}\n");  }  static int do_help(int argc, char **argv) diff --git a/src/tools/irm/irm_ops.h b/src/tools/irm/irm_ops.h index 24eee0df..9a59d69a 100644 --- a/src/tools/irm/irm_ops.h +++ b/src/tools/irm/irm_ops.h @@ -26,7 +26,13 @@ int do_destroy_ipcp(int argc, char ** argv);  int do_bootstrap_ipcp(int argc, char ** argv);  int do_enroll_ipcp(int argc, char ** argv); -int do_bind(int argc, char ** argv); -int do_unbind(int argc, char ** argv); +int bind_cmd(int argc, char ** argv); +int do_bind_ap(int argc, char ** argv); +int do_bind_api(int argc, char ** argv); +int do_bind_ipcp(int argc, char ** argv); +int unbind_cmd(int argc, char ** argv); +int do_unbind_ap(int argc, char ** argv); +int do_unbind_api(int argc, char ** argv); +int do_unbind_ipcp(int argc, char ** argv);  int do_register(int argc, char ** argv);  int do_unregister(int argc, char ** argv); diff --git a/src/tools/irm/irm_unbind.c b/src/tools/irm/irm_unbind.c index 9e8f3c9c..0290e678 100644 --- a/src/tools/irm/irm_unbind.c +++ b/src/tools/irm/irm_unbind.c @@ -3,6 +3,7 @@   *   * Unbind names in the processing system   * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be>   *    Sander Vrijders   <sander.vrijders@intec.ugent.be>   *   * This program is free software; you can redistribute it and/or modify @@ -29,35 +30,46 @@  static void usage()  { -        printf("Usage: irm unbind\n" -               "           name <name>\n" -               "           ap <application process name>\n"); +        printf("Usage: irm unbind [OPERATION]\n" +               "where OPERATION = {ap api ipcp help}\n");  } -int do_unbind(int argc, char ** argv) +static int do_help(int argc, char **argv)  { -        char * name = NULL; -        char * ap_name = NULL; - -        while (argc > 0) { -                if (matches(*argv, "name") == 0) { -                        name = *(argv + 1); -                } else if (matches(*argv, "ap") == 0) { -                        ap_name = *(argv + 1); -                } else { -                        printf("\"%s\" is unknown, try \"irm " -                               "unbind\".\n", *argv); -                        return -1; -                } - -                argc -= 2; -                argv += 2; -        } +        usage(); +        return 0; +} + +static const struct cmd { +        const char * cmd; +        int (* func)(int argc, char ** argv); +} cmds[] = { +        { "ap",   do_unbind_ap }, +        { "api",  do_unbind_api }, +        { "ipcp", do_unbind_ipcp }, +        { "help", do_help }, +        { 0 } +}; + +static int do_cmd(const char * argv0, int argc, char ** argv) +{ +        const struct cmd * c; -        if (name == NULL && ap_name == NULL) { +        for (c = cmds; c->cmd; ++c) +                if (!matches(argv0, c->cmd)) +                        return c->func(argc, argv); + +        fprintf(stderr, "\"%s\" is unknown, try \"irm unbind help\".\n", argv0); + +        return -1; +} + +int unbind_cmd(int argc, char ** argv) +{ +        if (argc < 1) {                  usage();                  return -1;          } -        return irm_unbind(name, ap_name, 0); +        return do_cmd(argv[0], argc, argv);  } diff --git a/src/tools/irm/irm_unbind_ap.c b/src/tools/irm/irm_unbind_ap.c new file mode 100644 index 00000000..bdfcbaad --- /dev/null +++ b/src/tools/irm/irm_unbind_ap.c @@ -0,0 +1,68 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Unbind AP names + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm unbind ap <ap>\n" +               "          [name <name>, omit: remove all AP info]\n"); +} + +int do_unbind_ap(int argc, char ** argv) +{ +        char * name = NULL; +        char * ap_name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "ap") == 0) { +                        ap_name = *(argv + 1); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "unbind ap\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (ap_name == NULL) { +                usage(); +                return -1; +        } + +        return irm_unbind_ap(ap_name, name); +} diff --git a/src/tools/irm/irm_unbind_api.c b/src/tools/irm/irm_unbind_api.c new file mode 100644 index 00000000..b69a4579 --- /dev/null +++ b/src/tools/irm/irm_unbind_api.c @@ -0,0 +1,69 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Unbind AP-I names + * + *    Dimitri Staessens <dimitri.staessens@intec.ugent.be> + *    Sander Vrijders   <sander.vrijders@intec.ugent.be> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> + +#include <ouroboros/irm.h> + +#include "irm_ops.h" +#include "irm_utils.h" + +static void usage() +{ +        printf("Usage: irm unbind api <pid>\n" +               "          [name <name>, omit: remove all AP-I info]\n"); +} + +int do_unbind_api(int argc, char ** argv) +{ +        pid_t api = -1; +        char * name = NULL; + +        while (argc > 0) { +                if (matches(*argv, "name") == 0) { +                        name = *(argv + 1); +                        ++argv; +                        --argc; +                } else if (matches(*argv, "api") == 0) { +                        api = strtol(*(argv + 1), NULL, 10); +                        ++argv; +                        --argc; +                } else { +                        printf("\"%s\" is unknown, try \"irm " +                               "unbind api\".\n", *argv); +                        return -1; +                } + +                ++argv; +                --argc; +        } + +        if (api < 0) { +                usage(); +                return -1; +        } + +        return irm_unbind_api(api, name); +} 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); | 
