int main(int len,char** args) { /* char p[80]; */ int i=0; char ch[80]; pxy_worker_t *w; if(pxy_init_master() < 0){ D("master initialize failed"); return -1; } D("master initialized"); /*spawn worker*/ for(;i<config->worker_count;i++){ w = (pxy_worker_t*)(master->workers + i); if(socketpair(AF_UNIX,SOCK_STREAM,0,w->socket_pair) < 0) { D("create socket pair error"); continue; } if(setnonblocking(w->socket_pair[0]) < 0) { D("setnonblocking error fd:#%d",w->socket_pair[0]); continue; } if(setnonblocking(w->socket_pair[1]) < 0) { D("setnonblocking error fd:#%d",w->socket_pair[1]); continue; } pid_t p = fork(); if(p < 0) { D("%s","forkerror"); } else if(p == 0){/*child*/ if(worker_init()<0){ D("worker #%d initialized failed" , getpid()); return -1; } D("worker #%d initialized success", getpid()); close (w->socket_pair[0]); /*child should close the pair[0]*/ ev_file_item_t *f = ev_file_item_new(w->socket_pair[1], worker, worker_recv_cmd, NULL, EV_READABLE | EPOLLET); if(!f){ D("new file item error"); return -1; } if(ev_add_file_item(worker->ev,f) < 0) { D("add event error"); return -1; } if(!worker_start()) { D("worker #%d started failed", getpid()); return -1; } } else{ /*parent*/ w->pid = p; close(w->socket_pair[1]); /*parent close the pair[1]*/ } } while(scanf("%s",ch) >= 0 && strcmp(ch,"quit") !=0){ } w = (pxy_worker_t*)master->workers; pxy_send_command(w,PXY_CMD_QUIT,-1); sleep(5); pxy_master_close(); return 1; }
int main(int argc, char** argv) { log_file = stdout; init_log(); D("process start"); char ch[80]; D("Start init settings!"); if (argc > 1) { strcpy(conf_file, argv[1]); } else { strcpy(conf_file, "mspc.conf"); } if (pxy_setting_init(conf_file) != 0) { D("settings initialize failed!\n"); return -1; } if (pxy_init_logdb()) { E("init logdb failed!\n"); return -1; } char time[32]; char loggername[64]; db_gettimestr(time, sizeof(time)); sprintf(loggername, "%s:%s:%d", __FILE__, __FUNCTION__, __LINE__); db_insert_log(30000, 0, getpid(), time, loggername, "mspc start...", "", "00000", "", "mspc", setting.ip); if (pxy_init_master() < 0) { E("master initialize failed"); return -1; } D("master initialized"); /* TODO: Maybe we need remove the master-worker mode, seems useless */ if (worker_init()<0) { E("worker #%d initialized failed" , getpid()); return -1; } D("worker inited"); if (worker_start() < 0) { E("worker #%d started failed", getpid()); return -1; } D("worker started"); while(scanf("%s",ch) >= 0 && strcmp(ch,"quit") !=0) { } sleep(5); D("pxy_master_close"); pxy_master_close(); return 1; }