static void mySignalHandler( int sig ) { char sigDesc[16]; switch (sig) { case SIGHUP: strcpy( sigDesc, "HUP" ); break; case SIGINT: strcpy( sigDesc, "INT" ); break; case SIGTERM: strcpy( sigDesc, "TERM" ); break; case SIGILL: strcpy( sigDesc, "ILL" ); break; case SIGSEGV: strcpy( sigDesc, "SEGV" ); break; default: sprintf( sigDesc, "%d", sig ); break; } ufdbLogMessage( "signal %s received. exiting...", sigDesc ); removePidFile(); exit( 0 ); }
void safeExit() { DEBUGPRINT("End\n"); g_message("Shuting down..."); gp_log_close(); // Do not remove file if already running. if (appPid2==0) { removePidFile(); } exit(0); }
int main(int argc, char **argv) { int err; parseArguments(argc, argv); if (nodaemon == 0) { err = daemonise(); if (err != 0) exit(1); err = writePidFile(pidFile); if (err != 0) exit(1); } err = signalisation(); if (err != 0) exit(1); serverSocket = openServerSocket(port); if (serverSocket == -1) exit(1); request_t req; response_t resp; output_t output; memset(&output, 0, sizeof(output_t)); while (serverSocket != -1) { memset(&req, 0, sizeof(request_t)); memset(&resp, 0, sizeof(response_t)); int client = serverSocketAccept(serverSocket); if (client == -1) continue; int r = parseRequest(client, &req, &resp); if (r != 0) { clientPrintf(client, "HTTP/1.1 %03d\r\n", resp.status); closeClient(client); continue; } if (1) { printf("path: %s\n", req.path); for (int i =0; i < req.num_args; i++) printf("arg[%d]: %s = %s\n", i, req.names[i], req.values[i]); } const char* cmdline = findCommand(req.path); if (cmdline == NULL) { log_warn("Daemon: Invalid path: '%s'\n", req.path); clientPrint(client, "HTTP/1.1 404\r\n"); closeClient(client); continue; } if (execute(&output, cmdline) != 0) { clientPrint(client, "HTTP/1.1 500\r\n"); // Internal server error closeClient(client); continue; } if ((output.count > 8) && (strncmp(output.buf, "HTTP/1.1", 8) == 0)) { clientWrite(client, output.buf, output.count); } else { clientPrintf(client, "HTTP/1.1 200\r\nContent-Length: %d\r\n\r\n", output.count); clientWrite(client, output.buf, output.count); } closeClient(client); output_clear(&output); if (req.path) free(req.path); } removePidFile(pidFile); return 0; }
int main(int argc, char **argv) { int err; server_init(); parse_arguments(argc, argv); log_set_file(logFile); if (nodaemon == 0) { err = daemonise(); if (err != 0) exit(1); err = writePidFile(pidFile); if (err != 0) exit(1); err = drop_privileges(); if (err != 0) exit(1); } err = signalisation(); if (err != 0) exit(1); serverSocket = openServerSocket(NULL, port); if (serverSocket == -1) exit(1); log_info("Server ready for connections"); request_t req; response_t resp; memset(&req, 0, sizeof(request_t)); memset(&resp, 0, sizeof(response_t)); while (serverSocket != -1) { int client = serverSocketAccept(serverSocket); if (client == -1) { continue; } int r = parseRequest(client, &req, &resp); if (r != 0) { clientPrintf(client, "HTTP/1.1 %03d\r\n", resp.status); closeClient(client); continue; } log_info("Request: %s", req.path); if (1) { list_t* l = req.args; while (l) { pair_t* p = (pair_t*) l->data; log_debug("args[]: %s = %s", p->name, p->value); l = l->next; } l = req.headers; while (l) { pair_t* p = (pair_t*) l->data; log_debug("headers[]: '%s': '%s'", p->name, p->value); l = l->next; } } server_handle_request(&req, &resp); // Debug printf if (resp.status != 0) { clientPrintf(client, "HTTP/1.1 %03d\r\n" "Content-Length: %d\r\n" "Content-Type: %s\r\n" "\r\n", resp.status, resp.length, resp.content_type); clientWrite(client, resp.body, resp.length); } else { log_err("main.c, request status == 0, request not handle!"); } closeClient(client); request_clear(&req); response_clear(&resp); } removePidFile(pidFile); return 0; }
static void TermHandler( int sig ) { ufdbLogMessage( "signal TERM received. " ); removePidFile(); exit( 0 ); }
PidFile::~PidFile( void ) { removePidFile(); }