Files
Cnomicon/include/libnet++/Daemon.h
2021-01-22 10:16:20 -05:00

90 lines
2.1 KiB
C++

//
// Linux Daemon
//
/* prevent multiple inclusions */
#ifndef __Daemon__
#define __Daemon__
/* includes *****************************************************************/
#include <stdarg.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "LogData.h"
/* defines ******************************************************************/
/* macros *******************************************************************/
/* structs & typedefs *******************************************************/
/* c class definitions ******************************************************/
class Daemon {
// public data
public:
// protected data
protected:
// private data
private:
char m_name[32];
bool m_debug;
int m_pid;
// public methods
public:
// constructors
Daemon();
Daemon( const char *name, int debug, int noclose );
// destructor
virtual ~Daemon();
// public methods
int Daemonize( const char *name, int debug=0, int noclose=0 );
void Die( int code );
void SetDebug(bool debug) {m_debug = debug;};
bool GetDebug(void) {return m_debug;};
bool IsDebug(void) {return m_debug;};
void Dprintf( const char *fmt, ... );
void SetName(const char *s) {strncpy(m_name,s,sizeof(m_name)-1);};
char *GetName(void) {return m_name;};
int GetPid(void) {return m_pid;};
// virtual functions
virtual void DaemonStartup(void) {};
virtual void DaemonShutdown(void) {};
virtual void DaemonReload(void) {};
// exceptions
class DaemonException
{
char *toString(void) { return strerror(errno); };
};
// static methods to override
static int SignalAlarm(void) {return 1;};
static int SignalDeath(void) {return 1;};
static int SignalInterrupt(void) {return 1;};
static void SignalHup(void) {;};
// private methods
private:
// signal catchers (do not override)
static void signal_alarm(int signum);
static void signal_child(int signum);
static void signal_death(int signum);
static void signal_intrp(int signum);
static void signal_hup(int signum);
};
#endif