#include <stdbool.h>
#include "mk_service.h"
+#include "mk_server.h"
#include "mk_log.h"
#include "mk_util.h"
#include "mk_version.h"
int main(int argc, char** argv){
int i;
+ bool daemon = true;
for(i = 1; i < argc; i++){
if(argv[i][0] == '-'){
if(strcmp(argv[i], "--stderr") == 0 || strcmp(argv[i], "-S") == 0){
mk_syslog = false;
+ }else if(strcmp(argv[i], "-D") == 0){
+ daemon = false;
}else{
fprintf(stderr, "%s: %s: unknown flag\n", argv[0], argv[i]);
return 1;
mk_service_scan();
mk_start_services();
mk_log("Mokou is up, creating the server socket");
+ if(mk_server_init() != 0){
+ mk_log("Could not initialize the server");
+ return 1;
+ }
+ unsigned long long pid = 0;
+ if(daemon){
+ mk_log("Spawning daemon");
+ pid = fork();
+ }
+ if(pid == 0){
+ if(daemon){
+ mk_log("Hello from daemon");
+ }
+ mk_log("Entering server loop");
+ mk_server_loop();
+ return 0;
+ }else if(daemon){
+ FILE* f = fopen("/var/run/mokou.pid", "w");
+ fprintf(f, "%llu", pid);
+ fclose(f);
+ }
}
/* $Id$ */
#include "mk_server.h"
+
+#include "mk_version.h"
+#include "mk_util.h"
+#include "mk_log.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+
+struct sockaddr_un sun;
+int server;
+
+int mk_server_init(void){
+ remove("/tmp/mokou.sock");
+ memset(&sun, 0, sizeof(sun));
+ server = socket(AF_LOCAL, SOCK_STREAM, 0);
+ if(server == -1){
+ mk_log("Socket creation failure");
+ return 1;
+ }
+ sun.sun_family = AF_LOCAL;
+ strcpy(sun.sun_path, "/tmp/mokou.sock");
+ if(bind(server, (struct sockaddr*)&sun, sizeof(sun)) == -1){
+ mk_log("Bind failure");
+ close(server);
+ return 1;
+ }
+ if(listen(server, 16) == -1){
+ mk_log("Listen failure");
+ close(server);
+ return 1;
+ }
+ return 0;
+}
+
+void mk_server_loop(void){
+ struct sockaddr_un cun;
+ socklen_t socklen = sizeof(cun);
+ char* ver = mk_strcat3("V", mk_get_version(), "\n");
+ while(1){
+ mk_log("Waiting for the connection");
+ int cli = accept(server, (struct sockaddr*)&cun, &socklen);
+ send(cli, ver, strlen(ver), 0);
+ close(cli);
+ }
+ free(ver);
+}