int main (int argc, char *argv[]) { tests_start (); check_tstbit (); check_random (argc, argv); check_single (); tests_end (); exit (0); }
int main (int argc, char *argv[]) { tests_start (); mp_trace_base = -16; check_clr_extend (); check_com_negs (); check_tstbit (); check_random (argc, argv); check_single (); tests_end (); exit (0); }
int main(int argc, char* argv[]) { arg_start = argv[0]; arg_end = argv[argc-1] + strlen(argv[argc - 1]) + 1; env_start = environ[0]; if (argc != 2) exit(-1); daemon_start(); INFO_LOG ("async_server %s, report bugs to <*****@*****.**>", VERSION); load_config_file(argv[1]); check_single(); if (config_get_strval("proc_name", NULL)) { set_title("%s-MAIN", config_get_strval("proc_name", NULL)); } else { set_title("%s-MAIN", arg_start); } load_work_file(config_get_strval("work_conf", "")); if (-1 == log_init(config_get_strval("log_dir", "./"), (log_lvl_t)config_get_intval("log_level", 8), config_get_intval("log_size", 33554432), config_get_intval("log_maxfiles", 100), "main_")) { BOOT_LOG(-1, "log init"); } init_warning_system(); plugin_load(config_get_strval("plugin_file", "")); shmq_init(g_work_confs.size(), config_get_intval("shmq_size", 8388608)); int max_connect = config_get_intval("max_connect", 10000); if (max_connect <= 4096) max_connect = 4096; g_max_connect = max_connect; int max_pkg_len = config_get_intval("max_pkg_len", 16384); if (max_pkg_len <= 4096) max_pkg_len = 4096; g_max_pkg_len = max_pkg_len; const char * bind_ip = config_get_strval("bind_ip", NULL); if (NULL == bind_ip) { BOOT_LOG(-1, "unspecified bind_ip"); return -1; } if (0 != get_ip_by_name(bind_ip, g_bind_ip)) { strncpy(g_bind_ip, bind_ip, 16); } if (g_plugin.plugin_init) { if (g_plugin.plugin_init(PROC_MAIN) != 0) BOOT_LOG(-1, "plugin_init init failed PROC_MAIN"); } for (uint32_t i = 0; i < g_work_confs.size(); ++i) g_work_confs[i].pid = fork_work(i); pid_t conn_pid = fork_conn(); while (!g_stop) { int status = 0; pid_t p = waitpid(-1, &status, 0); if(-1 == p) continue; if (WEXITSTATUS(status) == 10) { if (p == conn_pid) { conn_pid = -1; } else { for (uint32_t i = 0; i < g_work_confs.size(); ++i) { if (g_work_confs[i].pid == p) { g_work_confs[i].pid = -1; break; } } } } else { if (p == conn_pid) { conn_pid = fork_conn(); send_warning_msg("conn core", 0, 0, 0, config_get_strval("bind_ip", "0.0.0.0")); ERROR_LOG("conn core"); } else { for (uint32_t i = 0; i < g_work_confs.size(); ++i) { if (g_work_confs[i].pid == p) { ERROR_LOG("work core, id: %u, pid: %d", g_work_confs[i].id, p); g_work_confs[i].pid = fork_work(i); send_warning_msg("work core", g_work_confs[i].id, 0, 0, config_get_strval("bind_ip", "0.0.0.0")); break; } } } } } for (uint32_t i = 0; i < g_work_confs.size(); ++i) { if (g_work_confs[i].pid != -1) kill(g_work_confs[i].pid, SIGTERM); } if (conn_pid != -1) kill(conn_pid, SIGTERM); while (true) { int ret = 0; for (uint32_t i = 0; i < g_work_confs.size(); ++i) { if (g_work_confs[i].pid != -1) ret = 1; } if (ret || conn_pid != -1) { int status = 0; pid_t p = waitpid(-1, &status, 0); if(-1 == p) continue; if (p == conn_pid) { conn_pid = -1; } else { for (uint32_t i = 0; i < g_work_confs.size(); ++i) { if (g_work_confs[i].pid == p) { g_work_confs[i].pid = -1; break; } } } } else { break; } } if (g_plugin.plugin_fini) g_plugin.plugin_fini(PROC_MAIN); }