int startServer( appnetServer *serv ) { int sockfd[2]; int sock_count = 0; set_daemon( serv ); // memory alloc initServer( serv ); listenToPort( serv->listen_ip , serv->port , sockfd , &sock_count ); serv->listenfd = sockfd[0]; createWorkerProcess( serv ); createReactorThreads( serv ); __SLEEP_WAIT__; runMainReactor( serv ); destroyServer( serv ); __SLEEP_WAIT__; return 0; }
/** * parses command line arguments and assigns values to run time * variables. relies on GNU getopts included with this distribution. */ void parse_cmdline(CONF C, int argc, char *argv[]) { int c = 0; BOOLEAN display = FALSE; while ((c = getopt_long(argc, argv, "Vhvf:CDd:l:p:", long_options, (int *)0)) != EOF) { switch (c) { case 'V': display_version(TRUE); break; case 'h': display_help(EXIT_SUCCESS); case 'v': set_verbose(C, TRUE); break; case 'C': display = TRUE; break; //case 'f': //XXX: parsed separately // set_cfgfile(C, optarg); // break; case 'D': set_debug(C, TRUE); break; case 'd': if (!optarg) { puts("NO OPTARG"); } if (optarg != NULL && !strncasecmp(optarg, "false", 5)) { set_daemon(C, FALSE); } else { set_daemon(C, TRUE); } break; case 'l': set_logfile(C, optarg); break; case 'p': set_pidfile(C, optarg); break; } /* end of switch */ } /* end of while */ if (display) { show(C, TRUE); } return; } /* end of parse_cmdline */
int main(int argc, char *argv[]) { int opt_char; int ret_code; bool daemon_flag = false; static const char *short_opts = "c:dhv"; struct option long_opts[] = { {"help", no_argument, 0, 'h'}, {"version",no_argument, 0, 'v'}, {"deamon", no_argument, 0, 'd'}, {"config", required_argument, 0, 'c'}, {0, 0, 0, 0} }; while ((opt_char = getopt_long(argc, argv, short_opts, long_opts, NULL)) != -1) { switch (opt_char) { case 'c': SET_STR_OPT(g_mq_conf.conf_file); break; case 'd': daemon_flag = true; break; case 'v': print_version(); return 0; case 'h': default : print_usage(); return 0; } } /* If arguments contain -c, the config file was already processed */ if (!read_conf_file()) { fprintf(stderr, "ERROR: Read config fail, Please use the right conf\n"); return 1; } /* Init log */ { log_config_t mq_log; log_init_config(&mq_log); strcpy(mq_log.log_path, g_mq_conf.output_log_path); strcpy(mq_log.log_file,"ucmq_log"); if (strcmp(g_mq_conf.output_log_level, "TRACE") == 0) { mq_log.log_level = 0; } else if (strcmp(g_mq_conf.output_log_level, "DEBUG") == 0) { mq_log.log_level = 10; } else if (strcmp(g_mq_conf.output_log_level, "INFO") == 0) { mq_log.log_level = 100; } else if (strcmp(g_mq_conf.output_log_level, "WARN") == 0) { mq_log.log_level = 1000; } else if (strcmp(g_mq_conf.output_log_level, "ERROR") == 0) { mq_log.log_level = 10000; } else if (strcmp(g_mq_conf.output_log_level, "FATAL") == 0) { mq_log.log_level = 65535; } else { mq_log.log_level = 100; } log_init(&mq_log); } if (daemon_flag) { /* Set daemon */ set_daemon(); set_signal_handle(); log_info("<%s> Startup ... Daemon mode %s", argv[0], "on"); ret_code = main_entrance(); log_info("<%s> ShutDown Ok", argv[0]); } else { set_signal_handle(); log_info("<%s> Startup ... Daemon mode %s", argv[0], "off"); ret_code = main_entrance(); log_info("<%s> ShutDown Ok", argv[0]); } return ret_code; }