示例#1
0
文件: msgd.c 项目: montsuqi/panda
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);
}
示例#2
0
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;
}
示例#3
0
文件: glserver.c 项目: montsuqi/panda
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);
}