diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-09 13:54:38 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-09 13:54:38 +0200 |
commit | 7c20ae7f7737c35a9e322ee712a0c342d00f536e (patch) | |
tree | 2fc810140d526db835412b1bd41122c7dbdbade9 /server.c | |
parent | 88bd9dab5fce9e85972818400a827701caacd467 (diff) |
Add basic stop/start methods
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -3,6 +3,9 @@ #include <arpa/inet.h> #include <unistd.h> #include <inttypes.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <unistd.h> #include "main.h" #include "uring.h" @@ -221,6 +224,82 @@ out: return false; } +static bool +exec_cmd(struct cfg *cfg, struct server *scfg, const char *cmd) +{ + pid_t pid, wpid; + int wstatus; + + if (!cfg || !scfg || !cmd) + return false; + + pid = fork(); + if (pid < 0) { + perror("fork"); + return false; + + } else if (pid > 0) { + do { + wpid = waitpid(pid, &wstatus, 0); + if (wpid < 0) { + perror("waitpid"); + return false; + } + } while (!WIFEXITED(wstatus)); + + fprintf(stderr, "Child %s exited: %i\n", scfg->start_exec, WEXITSTATUS(wstatus)); + if (WEXITSTATUS(wstatus) == 0) + return true; + else + return false; + + } else { + execl(scfg->start_exec, scfg->start_exec, NULL); + perror("execl"); + exit(EXIT_FAILURE); + } +} + +bool +server_start(struct cfg *cfg, struct server *scfg) +{ + if (!cfg || !scfg) + return false; + + switch (scfg->start_method) { + + case SERVER_START_METHOD_EXEC: + + return exec_cmd(cfg, scfg, scfg->start_exec); + + case SERVER_START_METHOD_UNDEFINED: + default: + break; + } + + return false; +} + +bool +server_stop(struct cfg *cfg, struct server *scfg) +{ + if (!cfg || !scfg) + return false; + + switch (scfg->stop_method) { + + case SERVER_STOP_METHOD_EXEC: + + return exec_cmd(cfg, scfg, scfg->stop_exec); + + case SERVER_STOP_METHOD_UNDEFINED: + default: + break; + } + + return false; +} + bool server_commit(struct cfg *cfg, struct server *scfg) { |