bool WServer::start() { if (isRunning()) { LOG_ERROR_S(this, "start(): server already started!"); return false; } LOG_INFO_S(this, "initializing " << (impl_->sessionId_.empty() ? "shared" : "dedicated") << " wtfcgi session process"); if (configuration().webSockets()) { LOG_ERROR_S(this, "FastCGI does not support web-sockets, disabling"); configuration().setWebSockets(false); } configuration().setNeedReadBodyBeforeResponse(true); if (signal(SIGTERM, Wt::handleSigTerm) == SIG_ERR) LOG_ERROR_S(this, "cannot catch SIGTERM: signal(): " << strerror(errno)); if (signal(SIGUSR1, Wt::handleSigUsr1) == SIG_ERR) LOG_ERROR_S(this, "cannot catch SIGUSR1: signal(): " << strerror(errno)); if (signal(SIGHUP, Wt::handleSigHup) == SIG_ERR) LOG_ERROR_S(this, "cannot catch SIGHUP: signal(): " << strerror(errno)); webController_ = new Wt::WebController(*this, impl_->sessionId_, false); impl_->run(); return false; }
int WRun(int argc, char *argv[], ApplicationCreator createApplication) { try { WServer server(argv[0], ""); try { server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION); server.addEntryPoint(Application, createApplication); if (server.start()) { #ifdef WT_THREADED // MacOSX + valgrind: // for (;;) { sleep(100); } int sig = WServer::waitForShutdown(argv[0]); LOG_INFO_S(&server, "shutdown (signal = " << sig << ")"); #endif server.stop(); #ifdef WT_THREADED #ifndef WIN32 if (sig == SIGHUP) // Mac OSX: _NSGetEnviron() WServer::restart(argc, argv, 0); #endif // WIN32 #endif // WT_THREADED } return 0; } catch (std::exception& e) { LOG_INFO_S(&server, "fatal: " << e.what()); return 1; } } catch (Wt::WServer::Exception& e) { LOG_ERROR("fatal: " << e.what()); return 1; } catch (std::exception& e) { LOG_ERROR("fatal exception: " << e.what()); return 1; } }
void WServer::setServerConfiguration(int argc, char *argv[], const std::string&) { bool isRelayServer = argc < 2 || strcmp(argv[1], "client") != 0; if (isRelayServer) { LOG_INFO_S(this, "initializing relay server"); Server relayServer(*this, argc, argv); exit(relayServer.run()); } else { if (argc >= 3) impl_->sessionId_ = argv[2]; } }