Fixed inconsistent socket io.
[tlb/tomd.git] / src / tomd / main.c
index 3c2c84c..cfbb8b9 100644 (file)
@@ -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;
 }