diff options
Diffstat (limited to 'project2/cgi/p2webFCgi.cpp')
-rw-r--r-- | project2/cgi/p2webFCgi.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/project2/cgi/p2webFCgi.cpp b/project2/cgi/p2webFCgi.cpp new file mode 100644 index 0000000..620c441 --- /dev/null +++ b/project2/cgi/p2webFCgi.cpp @@ -0,0 +1,59 @@ +#include <syslog.h> +#include "cgiCommon.h" +#include "FCgiIO.h" +#include "../xmlObjectLoader.h" + +time_t lastPeriodic = 0; +time_t periodicDelay = 600; + +static +void +p2webPeriodic() +{ + time(&lastPeriodic); + LoaderBase::onPeriodic(); +} + +static +void +p2webGoingIdle(int) +{ + if (time(NULL) > lastPeriodic + periodicDelay) { + p2webPeriodic(); + } + LoaderBase::onIdle(); +} + +int +main(void) +{ + if (!FCGX_IsCGI()) { + syslog(LOG_NOTICE, "FCGID Startup ($Id$)"); + FCGX_Request request; + + FCGX_Init(); + FCGX_InitRequest(&request, 0, 0); + + struct sigaction onAlarm; + onAlarm.sa_handler = &p2webGoingIdle; + onAlarm.sa_flags = 0; + if (sigaction(SIGALRM, &onAlarm, NULL)) { + syslog(LOG_WARNING, "Failed to set signal handler"); + } + alarm(60); + while (FCGX_Accept_r(&request) == 0) { + alarm(0); + cgicc::FCgiIO IO(request); + cgiServe(&IO, IO); + alarm(60); + LoaderBase::onIteration(); + if (time(NULL) > lastPeriodic + periodicDelay) { + p2webPeriodic(); + } + } + } + else { + syslog(LOG_ERR, "FCGID not running as a FastCGI program"); + } + return 0; +} |