static void socket_init(void)
{
gen_socket_filename();
-
+
/* listen on socket, respond to requests. */
/* perform all registered 'tick' operations */
sfd =
#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)); \
} \
}
}
#define READ_SOCKET {\
+ memset(buf, 0, sizeof(buf)); \
int size = read(asfd, buf, 100); \
buf[size] = '\0'; \
}
request = request_types[i].request;
break;
}
-
+
i++;
}
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;
DOUBLE_DUTY("running: no\n");
DOUBLE_DUTY(" status: %d\n", jp->last_status);
}
-
+
if(jp->pid != -1){
DOUBLE_DUTY(" pid: %d\n", jp->pid);
}
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)
handle_request(asfd, buf);
shutdown(asfd, SHUT_WR);
+ close(asfd);
}
static void run(void)
perror("[tomd] accept socket");
exit(EXIT_FAILURE);
}
-
+
handle_connection(accept_sfd);
}
}
/* daemonize(); */
run();
cleanup();
-
+
return EXIT_SUCCESS;
}