int main(int argc, char **argv) { int i; if (argc > 1) { serv_init(NULL); serv_init(argv[1]); } else { fprintf(stderr,"need args\n"); } for (i = 0; i < serv_sock_ind; i++) { fprintf(stdout, "%d: %s\n", serv_sock[i], str_serv_sock[i]); } return(0); }
void exec_init() { // initialize all sub-systems hl_init(); schd_init(); lcd_init(); cam_init(); adc_init(); serv_init(); cont_init(); ui_init(); mot_init(); //comms_init(); // disable interrupt disable_irq(EXEC_PIT_IRQ_NUM); // enable the clock to the PIT module (pg. 299) SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; // enable clock for PIT timers and allow timers to continue to // run in debug mode (pg. 1038) PIT_MCR = 0x0; exec_disablePit(); exec_sysMode = EXEC_MODE_IDLE; lcd_update(); exec_update(); }
int main(void) { int listenfd; int hostlen; char *host; socklen_t addrlenp; /* * 检测系统支持最大的主机名长度 * 如果获取失败便设置为256 */ if ( (hostlen = sysconf(_SC_HOST_NAME_MAX)) < 0) hostlen = HOST_NAME_MAX; if ((host = malloc(hostlen)) == NULL) oops("malloc"); /* 获取服务器主机名 */ if (gethostname(host, hostlen) < 0) oops("gethostname"); /* 调用serv_init函数获取listen socket */ if ((listenfd = serv_init(host, SERV_PORT_STR, &addrlenp)) < 0) oops("serv_init"); serve(listenfd); exit(0); }
int main(int argc, char **argv){ serv_init(argc, argv); Server serv; Fdevents fdes; const Fdevents::events_t *events; fdes.set(serv_link->fd(), FDEVENT_IN, FRONT_LISTEN_LINK, serv_link); uint32_t last_timer_ticks = g_ticks; while(!quit){ events = fdes.wait(TICK_INTERVAL); if(events == NULL){ log_fatal("events.wait error: %s", strerror(errno)); break; } uint32_t curr_ticks = g_ticks; if(last_timer_ticks < curr_ticks){ uint32_t elapsed_ticks = (uint32_t)(curr_ticks - last_timer_ticks); last_timer_ticks = curr_ticks; if(elapsed_ticks > 5 * 1000/TICK_INTERVAL){ // 5 seconds // something blocks too long elapsed_ticks = 0; }else{ for(int i=0; i<elapsed_ticks; i++){ serv.tick(); } } } for(int i=0; i<(int)events->size(); i++){ const Fdevent *fde = events->at(i); int type = fde->data.num; UdpLink *link = (UdpLink *)fde->data.ptr; if(type == FRONT_LISTEN_LINK){ UdpLink *new_link = serv.proc_listen_link(link, &fdes); if(new_link){ fdes.set(new_link->fd(), FDEVENT_IN, FRONT_CLIENT_LINK, new_link); } }else if(type == FRONT_CLIENT_LINK){ int ret = serv.proc_client_link(link, &fdes); if(ret == -1){ fdes.del(link->fd()); log_debug("close link: %d", link->fd()); delete link; } }else if(type == ADMIN_LISTEN_LINK){ // }else if(type == ADMIN_CLIENT_LINK){ // } } } serv_free(); return 0; }
int main(int ac, char **av) { int ch, i=0; pid_t pid; FILE *fp; uid_t uid; #ifdef USE_THREAD pthread_t tid; pthread_attr_t attr; struct rlimit rl; rlim_t max_fd = (rlim_t)MAX_FD; rlim_t save_fd = 0; #endif #ifdef USE_THREAD threading = 1; max_thread = MAX_THREAD; #endif max_child = MAX_CHILD; cur_child = 0; /* create service socket table (malloc) */ if (serv_init(NULL) < 0) { msg_out(crit, "cannot malloc: %m\n"); exit(-1); } proxy_tbl = NULL; proxy_tbl_ind = 0; method_num = 0; uid = getuid(); openlog(ident, LOG_PID | LOG_NDELAY, SYSLOGFAC); while((ch = getopt(ac, av, "a:c:i:J:m:o:p:u:frstbwgIqvh?")) != -1) switch (ch) { case 'a': if (optarg != NULL) { for (i=0; i<sizeof method_tab; optarg++) { if (*optarg == '\0') break; switch (*optarg) { case 'p': if ( uid != 0 ) { /* process does not started by root */ msg_out(warn, "uid == %d (!=0)," "user/pass auth will not work, ignored.\n", uid); break; } method_tab[i++] = S5AUSRPAS; method_num++; break; case 'n': method_tab[i++] = S5ANOAUTH; method_num++; break; default: break; } } } break; case 'b': bind_restrict = 0; break; case 'c': if (optarg != NULL) { config = strdup(optarg); } break; case 'u': if (optarg != NULL) { pwdfile = strdup(optarg); } break; case 'i': if (optarg != NULL) { if (serv_init(optarg) < 0) { msg_out(warn, "cannot init server socket(-i %s): %m\n", optarg); break; } } break; #ifdef SO_BINDTODEVICE case 'J': if (optarg != NULL) { bindtodevice = strdup(optarg); } break; #endif case 'o': if (optarg != NULL) { idle_timeout = atol(optarg); } break; case 'p': if (optarg != NULL) { pidfile = strdup(optarg); } break; case 'm': if (optarg != NULL) { #ifdef USE_THREAD max_thread = atoi(optarg); #endif max_child = atoi(optarg); } break; case 't': #ifdef USE_THREAD threading = 0; /* threading disabled. */ #endif break; case 'g': same_interface = 1; break; case 'f': fg = 1; break; case 'r': resolv_client = 1; break; case 's': forcesyslog = 1; break; case 'w': #ifdef HAVE_LIBWRAP use_tcpwrap = 1; #endif /* HAVE_LIBWRAP */ break; case 'I': inetd_mode = 1; break; case 'q': be_quiet = 1; break; case 'v': show_version(); exit(1); case 'h': case '?': default: usage(); } ac -= optind; av += optind; if ((fp = fopen(config, "r")) != NULL) { if (readconf(fp) != 0) { /* readconf error */ exit(1); } fclose(fp); } if (inetd_mode) { /* close all server socket if opened */ close_all_serv(); /* assuming that STDIN_FILENO handles bi-directional */ exit(inetd_service(STDIN_FILENO)); /* not reached */ } if (serv_sock_ind == 0) { /* no valid ifs yet */ if (serv_init(":") < 0) { /* use default */ /* fatal */ msg_out(crit, "cannot open server socket\n"); exit(1); } } #ifdef USE_THREAD if ( ! threading ) { #endif if (queue_init() != 0) { msg_out(crit, "cannot init signal queue\n"); exit(1); } #ifdef USE_THREAD } #endif /* try changing working directory */ if ( chdir(WORKDIR0) != 0 ) if ( chdir(WORKDIR1) != 0 ) msg_out(norm, "giving up chdir to workdir"); if (!fg) { /* force stdin/out/err allocate to /dev/null */ fclose(stdin); fp = fopen("/dev/null", "w+"); if (fileno(fp) != STDIN_FILENO) { msg_out(crit, "fopen: %m"); exit(1); } if (dup2(STDIN_FILENO, STDOUT_FILENO) == -1) { msg_out(crit, "dup2-1: %m"); exit(1); } if (dup2(STDIN_FILENO, STDERR_FILENO) == -1) { msg_out(crit, "dup2-2: %m"); exit(1); } switch(fork()) { case -1: msg_out(crit, "fork: %m"); exit(1); case 0: /* child */ pid = setsid(); if (pid == -1) { msg_out(crit, "setsid: %m"); exit(1); } break; default: /* parent */ exit(0); } } master_pid = getpid(); umask(S_IWGRP|S_IWOTH); if ((fp = fopen(pidfile, "w")) != NULL) { fprintf(fp, "%u\n", (unsigned)master_pid); fchown(fileno(fp), PROCUID, PROCGID); fclose(fp); } else { msg_out(warn, "cannot open pidfile %s", pidfile); } setsignal(SIGHUP, reload); setsignal(SIGINT, SIG_IGN); setsignal(SIGQUIT, SIG_IGN); setsignal(SIGILL, SIG_IGN); setsignal(SIGTRAP, SIG_IGN); setsignal(SIGABRT, SIG_IGN); #ifdef SIGEMT setsignal(SIGEMT, SIG_IGN); #endif setsignal(SIGFPE, SIG_IGN); setsignal(SIGBUS, SIG_IGN); setsignal(SIGSEGV, SIG_IGN); setsignal(SIGSYS, SIG_IGN); setsignal(SIGPIPE, SIG_IGN); setsignal(SIGALRM, SIG_IGN); setsignal(SIGTERM, cleanup); setsignal(SIGUSR1, SIG_IGN); setsignal(SIGUSR2, SIG_IGN); #ifdef SIGPOLL setsignal(SIGPOLL, SIG_IGN); #endif setsignal(SIGVTALRM, SIG_IGN); setsignal(SIGPROF, SIG_IGN); setsignal(SIGXCPU, SIG_IGN); setsignal(SIGXFSZ, SIG_IGN); #ifdef USE_THREAD if ( threading ) { if (max_thread <= 0 || max_thread > THREAD_LIMIT) { max_thread = THREAD_LIMIT; } /* resource limit is problem in threadig (e.g. Solaris:=64)*/ memset((caddr_t)&rl, 0, sizeof rl); if (getrlimit(RLIMIT_NOFILE, &rl) != 0) msg_out(warn, "getrlimit: %m"); else save_fd = rl.rlim_cur; if (rl.rlim_cur < (rlim_t)max_fd) rl.rlim_cur = max_fd; /* willing to fix to max_fd */ if ( rl.rlim_cur != save_fd ) /* if rlim_cur is changed */ if (setrlimit(RLIMIT_NOFILE, &rl) != 0) msg_out(warn, "cannot set rlimit(max_fd)"); setregid(0, PROCGID); setreuid(0, PROCUID); pthread_mutex_init(&mutex_select, NULL); pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); msg_out(norm, "Starting: MAX_TH(%d)", max_thread); for (i=0; i<max_thread; i++) { if (pthread_create(&tid, &attr, (void *)&serv_loop, (void *)NULL) != 0) exit(1); } main_thread = pthread_self(); /* store main thread ID */ for (;;) { pause(); } } else { #endif setsignal(SIGCHLD, reapchild); setregid(0, PROCGID); setreuid(0, PROCUID); msg_out(norm, "Starting: MAX_CH(%d)", max_child); serv_loop(); #ifdef USE_THREAD } #endif return(0); }
void create_view(void) { // Window win, ewin; Evas *evas; Ecore_Evas * ee; int x, y, w, h, res; int maxcol; int engine; char *fontdir; int font_cache, image_cache; char buf[4096]; char *s; E_DB_INT_GET(shell->rcfile, "/main_win/win_x", x, res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/main_win/win_y", y, res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/main_win/win_w", w, res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/main_win/win_h", h, res); ENGY_ASSERT(res); E_DB_STR_GET(shell->rcfile, "/aliases", (shell->aliases), res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/maxcolors", maxcol, res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/rendermethod", engine, res); ENGY_ASSERT(res); if (render_method != -1) engine = render_method; E_DB_INT_GET(shell->rcfile, "/maximagecache", image_cache, res); ENGY_ASSERT(res); E_DB_INT_GET(shell->rcfile, "/maxfontcache", font_cache, res); ENGY_ASSERT(res); E_DB_STR_GET(shell->rcfile, "/fontdir", s, res); ENGY_ASSERT(res); if (s[0] != '/') { snprintf(buf, 4000,"%s/%s", shell->home, s); imlib_add_path_to_font_path(buf); fontdir = DUP(buf); } else { imlib_add_path_to_font_path(s); fontdir = DUP(s); } FREE(s); /* win = ecore_window_new(0, x, y, w, h); ecore_window_set_events(win, XEV_CONFIGURE | XEV_KEY); evas = evas_new_all(ecore_display_get(), win, 0, 0, w, h, engine, maxcol, font_cache, image_cache, fontdir); ENGY_ASSERTS(evas, "evas_new"); FREE(fontdir); evas_set_output_viewport(evas, 0, 0, w, h); ewin = evas_get_window(evas); ecore_window_set_events(ewin, XEV_EXPOSE | XEV_BUTTON | XEV_MOUSE_MOVE); */ if (!ecore_x_init(NULL)) exit(-1); //LOG_AND_RETURN (ERR_EFL); if (!ecore_evas_init()) exit(-1); //LOG_AND_RETURN (ERR_EFL); ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 640, 480); if (!ee) exit(-1); //LOG_AND_RETURN (ERR_EFL); evas = ecore_evas_get(ee); evas_font_path_prepend(evas, fontdir); FREE(fontdir); ecore_evas_callback_delete_request_set(ee, engy_delete_request); ecore_evas_callback_pre_render_set(ee, engy_pre_rend); ecore_evas_callback_post_render_set(ee, engy_post_rend); ecore_evas_callback_resize_set(ee, engy_resize); ecore_evas_name_class_set(ee, "engy", "main"); ecore_evas_show(ee); _get_title_dcd(); shell->title = my_iconv(shell->title_dcd, TITLE); ecore_evas_title_set(ee, shell->title); shell->evas = evas; shell->win = ecore_evas_software_x11_window_get(ee); shell->ee = ee; shell->w = w; shell->h = h; // GLS // ecore_set_blank_pointer(win); // ecore_window_set_title(win, shell->title); // my_evas_init(); _shell_bg_create(); menu_init(); // GLS engy_cl_init(); cl_configure(w, h); log_init(); info_init(); info_sync(); panel_init(); pointer_init(); serv_init(); logo_init(); alias_init(); // evas_render(shell->evas); }