extern void ExecuteServer(char *fn) { int _fhLog; fd_set ready; int maxfd; Port *port; pthread_create(&_FileThread, NULL, (void *(*)(void *))FileThread, (void *)fn); port = ParPortName(PortNumber); _fhLog = InitServerPort(port, Back); maxfd = _fhLog; while (TRUE) { FD_ZERO(&ready); FD_SET(_fhLog, &ready); select(maxfd + 1, &ready, NULL, NULL, NULL); if (FD_ISSET(_fhLog, &ready)) { ConnectLog(_fhLog); } } DestroyPort(port); }
extern void InitSystem( char *name) { struct sigaction sa; ENTER_FUNC; InitNET(); memset( &sa, 0, sizeof(struct sigaction) ); sa.sa_flags = 0; sa.sa_handler = SIG_IGN; sigemptyset (&sa.sa_mask); sigaction( SIGPIPE, &sa, NULL ); sa.sa_handler = StopSystem; sa.sa_flags |= SA_RESTART; sigemptyset (&sa.sa_mask); sigaction( SIGHUP, &sa, NULL ); InitDirectory(); SetUpDirectory(Directory, NULL, NULL, NULL, P_NONE); if ( ThisEnv == NULL ) { Error("DI file parse error."); } InitDB_Process("dbmaster"); CheckDBG(name); if ( PortNumber == NULL ) { DBMasterPort = ParPortName(PORT_MASTER); } else { DBMasterPort = ParPort(PortNumber, PORT_MASTER); } DBMasterServer = NewDBMasterThread(ThisDBG, AuthURL, DBMasterPort, Back); if (!DBMasterServer) { Error("start dbmaster thread failed"); } LEAVE_FUNC; }
static void ExecuteServer(void) { int pid; int fd; int soc_len; int soc[MAX_SOCKET]; NETFILE *fpComm; Port *port; #ifdef USE_SSL SSL_CTX *ctx; char *ssl_warning; #endif port = ParPortName(PortNumber); soc_len = InitServerMultiPort(port, Back, soc); #ifdef USE_SSL ctx = NULL; if (fSsl) { ctx = MakeSSL_CTX(KeyFile, CertFile, CA_File, CA_Path, Ciphers); if (ctx == NULL) { Warning(GetSSLErrorMessage()); Error("CTX make error"); } if (!fVerifyPeer) { SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL); } ssl_warning = GetSSLWarningMessage(); if (strlen(ssl_warning) > 0) { Warning(ssl_warning); } } #endif while (TRUE) { if ((fd = AcceptLoop(soc, soc_len)) < 0) { continue; } if ((pid = fork()) > 0) { /* parent */ close(fd); } else if (pid == 0) { /* child */ #ifdef USE_SSL if (fSsl) { fpComm = MakeSSL_Net(ctx, fd); if (StartSSLServerSession(fpComm) != TRUE) { CloseNet(fpComm); Warning(GetSSLErrorMessage()); exit(0); } } else { fpComm = SocketToNet(fd); } #else fpComm = SocketToNet(fd); #endif alarm(API_TIMEOUT_SEC); HTTP_Method(fpComm); // FIXME avoid segv gl protocol timeout #if 0 CloseNet(fpComm); #endif exit(0); } } DestroyPort(port); }