send packet
git-svn-id: file:///raid/svn-personal/mokou/trunk@7 35d6bad2-6c5c-c749-ada2-a2c82cb3bd79
This commit is contained in:
parent
9b30e779ce
commit
818fd9fc92
25
Mokou/main.c
25
Mokou/main.c
|
@ -7,6 +7,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "mk_service.h"
|
#include "mk_service.h"
|
||||||
|
#include "mk_server.h"
|
||||||
#include "mk_log.h"
|
#include "mk_log.h"
|
||||||
#include "mk_util.h"
|
#include "mk_util.h"
|
||||||
#include "mk_version.h"
|
#include "mk_version.h"
|
||||||
|
@ -15,10 +16,13 @@ extern bool mk_syslog;
|
||||||
|
|
||||||
int main(int argc, char** argv){
|
int main(int argc, char** argv){
|
||||||
int i;
|
int i;
|
||||||
|
bool daemon = true;
|
||||||
for(i = 1; i < argc; i++){
|
for(i = 1; i < argc; i++){
|
||||||
if(argv[i][0] == '-'){
|
if(argv[i][0] == '-'){
|
||||||
if(strcmp(argv[i], "--stderr") == 0 || strcmp(argv[i], "-S") == 0){
|
if(strcmp(argv[i], "--stderr") == 0 || strcmp(argv[i], "-S") == 0){
|
||||||
mk_syslog = false;
|
mk_syslog = false;
|
||||||
|
}else if(strcmp(argv[i], "-D") == 0){
|
||||||
|
daemon = false;
|
||||||
}else{
|
}else{
|
||||||
fprintf(stderr, "%s: %s: unknown flag\n", argv[0], argv[i]);
|
fprintf(stderr, "%s: %s: unknown flag\n", argv[0], argv[i]);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -35,4 +39,25 @@ int main(int argc, char** argv){
|
||||||
mk_service_scan();
|
mk_service_scan();
|
||||||
mk_start_services();
|
mk_start_services();
|
||||||
mk_log("Mokou is up, creating the server socket");
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,5 +3,7 @@
|
||||||
#ifndef __MK_SERVER_H__
|
#ifndef __MK_SERVER_H__
|
||||||
#define __MK_SERVER_H__
|
#define __MK_SERVER_H__
|
||||||
|
|
||||||
|
int mk_server_init(void);
|
||||||
|
void mk_server_loop(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,3 +1,54 @@
|
||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
#include "mk_server.h"
|
#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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user