diff -r 627b09ee74e4 -r adb0bda54e6b src/server/daemon/main.c --- a/src/server/daemon/main.c Mon Feb 13 13:49:49 2012 +0100 +++ b/src/server/daemon/main.c Thu Feb 16 15:08:38 2012 +0100 @@ -29,6 +29,10 @@ #include #include +#include +#include +#include +#include #include "../util/pool.h" #include "../public/nsapi.h" @@ -38,15 +42,95 @@ #include "httprequest.h" + +int std_pipe_fds[2]; + void test() { } +/* + * SIGUSR1: reload the configuration files + */ +void sig_usr1_reload(int sig) { + printf("reload\n"); + + signal(SIGUSR1, sig_usr1_reload); +} + +/* + * SIGTERM: stop the server + */ +void sig_term(int sig) { + exit(EXIT_SUCCESS); +} + +void* log_pipe_thread(void *data) { + FILE *log_out = fopen("log.txt", "a"); + + char buf[1024]; + ssize_t r; + while((r = read(std_pipe_fds[0], buf, 1024)) > 0) { + fwrite(buf, 1, r, log_out); + fflush(log_out); + } + + fclose(log_out); +} + int main(int argc, char **argv) { + //test(); + + /* if the -c parameter is specified, we don't create a daemon */ + int d = 1; + for(int i=0;i 0) { + return EXIT_SUCCESS; + } + + if(setsid() < 0) { + printf("setsid failed\n"); + return EXIT_FAILURE; + } + + for(int i=0;i<3;i++) { + close(i); + } + + /* stdio redirection */ + /* create pipes */ + if(pipe(std_pipe_fds) != 0) { + perror("pipe"); + return EXIT_FAILURE; + } + //FILE *ws_out = fdopen(std_pipe_fds[1], "w"); + //*stdout = *ws_out; + //*stderr = *ws_out; + dup2(std_pipe_fds[1], 1); + dup2(std_pipe_fds[1], 2); + + pthread_t tid; + pthread_create(&tid, NULL, log_pipe_thread, NULL); + } + pool_init(NULL, NULL, NULL); - //test(); + /* add signal handler */ + signal(SIGUSR1, sig_usr1_reload); + signal(SIGTERM, sig_term); + /* start webserver */ int status; status = webserver_init(); if(status != 0) { @@ -60,7 +144,17 @@ return EXIT_FAILURE; } - getchar(); + /* TODO: join threads (or not?) */ + while(1) { + if(d) { + fflush(stdout); + fflush(stderr); + } + sleep(10000); + if(0) { + break; + } + } return EXIT_SUCCESS; }