X-Git-Url: https://git.hcoop.net/tlb/tomd.git/blobdiff_plain/eb0e832ce7c05643cbfa1e667dd969cef36f3aa7..1110e851faa51e1cbd22be8a921f283ddb97ff77:/src/tomd/main.c diff --git a/src/tomd/main.c b/src/tomd/main.c index 3c2c84c..cfbb8b9 100644 --- a/src/tomd/main.c +++ b/src/tomd/main.c @@ -75,7 +75,7 @@ static void gen_socket_filename(void) static void socket_init(void) { gen_socket_filename(); - + /* listen on socket, respond to requests. */ /* perform all registered 'tick' operations */ sfd = @@ -117,8 +117,14 @@ static void init(void) #define SEND_ACK { \ int size; \ - if(size = write(asfd, "ACK\n", sizeof "ACK\n") != sizeof "ACK\n") { \ - tomd_p("didn't send as much as we though (%d != %d)", size, sizeof "ACK\n"); \ + char ACK[4];\ + ACK[0] = 'A';\ + ACK[1] = 'C';\ + ACK[2] = 'K';\ + ACK[3] = '\0';\ +if(size = write(asfd, ACK, sizeof(ACK)) != sizeof(ACK)) { \ + tomd_p("didn't send as much as we though (%d != %d)",\ + size, sizeof(ACK)); \ } \ } @@ -138,6 +144,7 @@ static void daemonize(void) } #define READ_SOCKET {\ + memset(buf, 0, sizeof(buf)); \ int size = read(asfd, buf, 100); \ buf[size] = '\0'; \ } @@ -184,7 +191,7 @@ static void handle_request(int asfd, char *buf) request = request_types[i].request; break; } - + i++; } @@ -222,11 +229,11 @@ static void handle_request(int asfd, char *buf) perror("[tomd] waitpid"); }else if(n_pid == 0){ DOUBLE_DUTY("waitpid == 0, check manual\n"); - }else{ + }else{ DOUBLE_DUTY("running: %s\n", !WIFEXITED(status) ? "yes" : "no"); - + if(WIFEXITED(status)){ DOUBLE_DUTY(" status: %d\n", WEXITSTATUS(status)); jp->pid = -1; @@ -237,7 +244,7 @@ static void handle_request(int asfd, char *buf) DOUBLE_DUTY("running: no\n"); DOUBLE_DUTY(" status: %d\n", jp->last_status); } - + if(jp->pid != -1){ DOUBLE_DUTY(" pid: %d\n", jp->pid); } @@ -249,6 +256,11 @@ static void handle_request(int asfd, char *buf) tomd_p("sending ack."); SEND_ACK; tomd_p("ack is sent."); + get_ack: + READ_SOCKET; + if(strcmp(buf, "ACK") != 0) + goto get_ack; + tomd_p("ack was ack'd."); } static void handle_connection(int asfd) @@ -264,6 +276,7 @@ static void handle_connection(int asfd) handle_request(asfd, buf); shutdown(asfd, SHUT_WR); + close(asfd); } static void run(void) @@ -298,7 +311,7 @@ static void run(void) perror("[tomd] accept socket"); exit(EXIT_FAILURE); } - + handle_connection(accept_sfd); } } @@ -318,6 +331,6 @@ int main(int argc, char **argv) /* daemonize(); */ run(); cleanup(); - + return EXIT_SUCCESS; }