From 4bede1d02de893b450f5eb581aa0a384246c162d Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 9 Jun 2005 11:00:03 +0000 Subject: Added daemon code, and cleaned up using -Wall and -Werror --- src/miav_daemon.cc | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 src/miav_daemon.cc (limited to 'src/miav_daemon.cc') diff --git a/src/miav_daemon.cc b/src/miav_daemon.cc new file mode 100644 index 0000000..633ab7d --- /dev/null +++ b/src/miav_daemon.cc @@ -0,0 +1,91 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * miav_daemon.cc + * + * Thu Jun 9 11:14:19 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 11:00:03 deva + * Added daemon code, and cleaned up using -Wall and -Werror + * + */ + +#include +#include "miav_daemon.h" + +#include "info_console.h" +#include "miav_config.h" + +#include "server.h" +#include "socket.h" + +MiavDaemon::MiavDaemon() +{} + +MiavDaemon::~MiavDaemon() +{} + +int MiavDaemon::daemon_main() +{ + InfoConsole info; + config = new MiavConfig(ETC"/miav.conf", &info); + + int port = config->readInt("server_port"); + pid_t childpid; // variable to store the child's pid + + signal(SIGCLD, SIG_IGN); // Ved SIGCHILD til IGNORE maa wait/waitpid ikke kaldes + // (ellers kommer der kernel-brok) + + printf("Listening on port %d\n", port); + Socket *socket = new Socket(port, &info); + + while(1) { + Socket *csocket = new Socket(socket->slisten()); + if(csocket->isConnected()) { + childpid = fork(); + + switch(childpid) { + case -1: // fork() returns -1 on failure + perror("fork"); + exit(1); + case 0: // fork() returns 0 to the child process + delete socket; // Close listen socket. + newConnection(csocket); + delete csocket; // Close communication socket. + exit(0); + + default: // fork() returns new pid to the parent process + break; + } + } + } + delete socket; + return 0; +} + -- cgit v1.2.3