X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FDaemon%2FDaemon.cc;h=94d95ea5a4e476a66991dd900c1b8c4d29525e44;hb=456ee576285b76aa46240f8001f426757810dcc1;hp=079b383f44cc062f24323c902f8768c48a905063;hpb=b7f7003f523fa8251ac44b969374c7385d053cc4;p=senf.git diff --git a/Utils/Daemon/Daemon.cc b/Utils/Daemon/Daemon.cc index 079b383..94d95ea 100644 --- a/Utils/Daemon/Daemon.cc +++ b/Utils/Daemon/Daemon.cc @@ -92,6 +92,24 @@ prefix_ char ** senf::Daemon::argv() return argv_; } +namespace { + + struct IsDaemonOpt { + bool operator()(std::string const & str) const { + return str == "--no-daemon" + || boost::starts_with(str, std::string("--pid-file=")) + || boost::starts_with(str, std::string("--console-log=")); + } + }; +} + +prefix_ void senf::Daemon::removeDaemonArgs() +{ + char ** last (std::remove_if(argv_+1, argv_+argc_, IsDaemonOpt())); + *last = 0; + argc_ = last - argv_; +} + prefix_ void senf::Daemon::consoleLog(std::string const & path, StdStream which) { switch (which) { @@ -523,6 +541,9 @@ prefix_ void senf::Daemon::installSighandlers() ::sigaction(SIGHUP, &sa, NULL); + sa.sa_handler = SIG_IGN; + ::sigaction(SIGPIPE, &sa, NULL); + #ifdef SENF_DEBUG sa.sa_sigaction = &fatalSignalsHandler; sa.sa_flags = SA_RESTART | SA_SIGINFO;