示例#1
0
文件: serv.c 项目: linghutf/topcoder
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;
}
示例#2
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;
}
示例#3
0
文件: main.c 项目: zhangyinuo/otttt
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;
}