int main(int argc, char *argv[]) { int serv_fd,cli_fd; int len; char buf[BUFSIZ]; struct sockaddr_in addr,remoteaddr; bzero(&addr,sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(8000); if((serv_fd=socket(AF_INET,SOCK_STREAM,0))<0){ perror("socket"); return 1; } if(bind(serv_fd,(struct sockaddr *)&addr,sizeof(struct sockaddr))<0){ perror("bind"); return 1; } listen(serv_fd,5); socklen_t sin_size = sizeof(struct sockaddr_in); if((cli_fd=accept(serv_fd,(struct sockaddr *)&remoteaddr,&sin_size))<0){ perror("accept"); return 1; } printf("accept client:[%s:%d]\n",inet_ntoa(remoteaddr.sin_addr),ntohs(remoteaddr.sin_port)); pid_t pid; if((pid=fork())<0){ perror("fork"); }else if(pid==0){//write,send int time_len=30,rlen; while(1){ nowtime(buf,time_len); rlen = strlen(buf); fgets(buf+rlen,BUFSIZ-rlen,stdin);//get input len = send(cli_fd,buf,strlen(buf),0); if(strncmp("bye",buf+rlen,3)==0) goto stop; usleep(100); } }else{ while(1){ if((len = recv(cli_fd,buf,BUFSIZ,0))>0){ buf[len]='\0'; if(strncmp("bye",buf+len-4,3)==0) goto stop; printf("[recv]:%s",buf); } usleep(100); } } stop: prctl(PR_SET_PDEATHSIG,SIGHUP); close(cli_fd); close(serv_fd); return 0; }
int main(int argc, char **argv) { if(parse_args(argc, argv)) return 0; int err = 0; printf("Starting Server %s (%s)...%ld\n", version_string, compiling_date, nowtime()); if(myconfig_init(argc, argv) < 0) { printf("myconfig_init fail %m\n"); goto error; } daemon_start(argc, argv); umask(0); ICALL(init_log); ICALL(init_glog); ICALL(init_fdinfo); ICALL(delay_task_init); ICALL(init_thread); ICALL(init_global); ICALL(vfs_init); ICALL(init_task_info); ICALL(init_file_filter); ICALL(init_tc); if (get_self_info(&self_ipinfo)) { LOG(glogfd, LOG_NORMAL, "get_self_role ERR!\n"); self_ipinfo.role = ROLE_FCS; } if (self_ipinfo.role <= UNKOWN || self_ipinfo.role >= SELF_IP) { LOG(glogfd, LOG_ERROR, "get_self_role ERR!\n"); fprintf(stderr, "get_self_role ERR!\n"); goto error; } if (self_ipinfo.role != ROLE_VOSS_MASTER) ICALL(init_vfs_agent); char *srole = iprole[self_ipinfo.role]; LOG(glogfd, LOG_NORMAL, "MY ROLE is %s\n", srole); t_thread_arg arg; memset(&arg, 0, sizeof(arg)); snprintf(arg.name, sizeof(arg.name), "./%s_client.so", srole); LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name); if (ROLE_FCS != self_ipinfo.role) { arg.port = g_config.sig_port; arg.flag = 1; } arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096); if (init_vfs_thread(&arg)) goto error; t_thread_arg arg1; memset(&arg1, 0, sizeof(arg1)); snprintf(arg1.name, sizeof(arg1.name), "./%s_http.so", srole); LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg1.name); arg1.maxevent = myconfig_get_intval("vfs_data_maxevent", 4096); if (init_vfs_thread(&arg1)) goto error; thread_jumbo_title(); struct threadstat *thst = get_threadstat(); if(start_threads() < 0) goto out; thread_reached(thst); gen_pidfile(); printf("Server Started\n"); vfs_start_time = time(NULL); main_loop(thst); out: printf("Stopping Server %s (%s)...\n", version_string, compiling_date); thread_reached(thst); stop_threads(); myconfig_cleanup(); fini_fdinfo(); printf("Server Stopped.\n"); return restart; error: if(err == -ENOMEM) printf("\n\033[31m\033[1mNO ENOUGH MEMORY\033[0m\n"); printf("\033[31m\033[1mStart Fail.\033[0m\n"); return -1; }
int main(int argc, char **argv) { if(parse_args(argc, argv)) return 0; int err = 0; printf("Starting Server %s (%s)...%ld\n", version_string, compiling_date, nowtime()); if(myconfig_init(argc, argv) < 0) { printf("myconfig_init fail %m\n"); goto error; } daemon_start(argc, argv); umask(0); ICALL(start_watchdog); ICALL(init_log); ICALL(init_glog); ICALL(init_fdinfo); ICALL(delay_task_init); ICALL(init_thread); ICALL(init_global); ICALL(vfs_init); ICALL(init_task_info); if (g_config.voss_flag == 0) { t_thread_arg arg; memset(&arg, 0, sizeof(arg)); snprintf(arg.name, sizeof(arg.name), "./ott_server.so"); LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name); arg.port = 80; arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096); if (init_vfs_thread(&arg)) goto error; t_thread_arg arg1; memset(&arg1, 0, sizeof(arg1)); snprintf(arg1.name, sizeof(arg1.name), "./ott_client.so"); LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg1.name); arg1.maxevent = myconfig_get_intval("vfs_data_maxevent", 4096); if (init_vfs_thread(&arg1)) goto error; ICALL(init_vfs_agent); } else { t_thread_arg arg; memset(&arg, 0, sizeof(arg)); snprintf(arg.name, sizeof(arg.name), "./ott_voss.so"); LOG(glogfd, LOG_NORMAL, "prepare start %s\n", arg.name); arg.port = g_config.sig_port; arg.maxevent = myconfig_get_intval("vfs_sig_maxevent", 4096); if (init_vfs_thread(&arg)) goto error; } thread_jumbo_title(); struct threadstat *thst = get_threadstat(); if(start_threads() < 0) goto out; thread_reached(thst); gen_pidfile(); printf("Server Started\n"); vfs_start_time = time(NULL); main_loop(thst); out: printf("Stopping Server %s (%s)...\n", version_string, compiling_date); thread_reached(thst); stop_threads(); myconfig_cleanup(); fini_fdinfo(); printf("Server Stopped.\n"); return restart; error: if(err == -ENOMEM) printf("\n\033[31m\033[1mNO ENOUGH MEMORY\033[0m\n"); printf("\033[31m\033[1mStart Fail.\033[0m\n"); return -1; }