Ejemplo n.º 1
0
int main(int argc, const char *argv[])
{
	if(signal(SIGPIPE, SIG_IGN) == SIG_ERR)
		ERR_EXIT("signal");
	if(signal(SIGCHLD, handler) == SIG_ERR)
		ERR_EXIT("signal");

	int listenfd = get_listen_fd();
	while(1)
	{
		struct sockaddr_in peer_addr;
		bzero(&peer_addr, sizeof(peer_addr));
		socklen_t len = sizeof(peer_addr);
		int peerfd = accept(listenfd, (struct sockaddr*)&peer_addr, &len);
		if(peerfd == -1)
			ERR_EXIT("accept");
		printf("client on: %d\n", ntohs(peer_addr.sin_port));

		pid_t pid;
		if((pid = fork()) < 0)
			ERR_EXIT("fork");
		else if( pid == 0)
		{
			close(listenfd);
			do_service(peerfd);
			exit(EXIT_SUCCESS);
		}

		close(peerfd);
	}
	close(listenfd);
	return 0;
}
Ejemplo n.º 2
0
int main(int argc, char *argv[])
{
    init_sockets();
    init_threads();

    int listen_port = 7;
    if(argc == 2)
    {
        listen_port = atoi(argv[1]);
    }
    else
    {
        printf("usage: %s [local_port (default: %d)]\n", argv[0], listen_port);
    }

    printf("running server on port %d\n", listen_port);
    client_listen_fd = get_listen_fd(listen_port);
    
    for(;;)
    {
        int client_fd = accept(client_listen_fd, NULL, NULL);

        new_thread((void*)handle_connection, client_fd);
    }
}
Ejemplo n.º 3
0
int main(int argc, const char *argv[])
{
    if(signal(SIGPIPE, SIG_IGN) == SIG_ERR)
        ERR_EXIT("signal");
    
    int listenfd = get_listen_fd();

    do_epoll(listenfd);

    close(listenfd);
    return 0;
}
Ejemplo n.º 4
0
/* accept incoming  connect*/
struct ne_client_map * accetp_client_connect(struct listen_contex *listen_info)
{
	NEUINT16  session_id ;
	nesocket_t newconnect_fd ;
	socklen_t cli_len ;				/* client socket lenght */
	struct sockaddr_in client_addr ;
	
	struct ne_client_map *client_map ;
	struct cm_manager *pmanger = ne_listensrv_get_cmmamager(listen_info) ;

	cli_len = sizeof (client_addr);
	newconnect_fd = accept(get_listen_fd(listen_info), (struct sockaddr*)&client_addr, &cli_len);
	if(newconnect_fd < 0)
		return 0 ;
	
	//alloc a connect node struct 	
	client_map =(struct ne_client_map*) pmanger->alloc (ne_listensrv_get_cmallocator(listen_info)) ;
	if(!client_map){
		host_congest(newconnect_fd) ;
		//ne_logerror("server congest!") ;
		return 0;
	}
	if(pmanger->init )
		pmanger->init (client_map, (ne_handle)listen_info) ;
	else 
		ne_tcpcm_init(client_map,(ne_handle)listen_info);

	if(-1== ne_socket_nonblock(newconnect_fd,1)) {
		ne_socket_close(newconnect_fd);
		pmanger->dealloc (client_map,ne_listensrv_get_cmallocator(listen_info));
		return 0 ;
	}
	_set_socket_addribute(newconnect_fd) ;

	client_map->connect_node.fd = newconnect_fd ;
//	client_map->connect_node.remote_len = cli_len ;
	memcpy(&(client_map->connect_node.remote_addr),&client_addr, sizeof(client_addr)) ;
	TCPNODE_SET_OK(&client_map->connect_node) ;
	client_map->connect_node.srv_root = (ne_handle)&(listen_info->tcp) ;

	client_map->connect_node.session_id = session_id = pmanger->accept (pmanger,client_map);
	if(0==client_map->connect_node.session_id) {
		ne_socket_close(newconnect_fd);
		pmanger->unlock (pmanger,session_id);
		pmanger->dealloc (client_map,ne_listensrv_get_cmallocator(listen_info));
		return 0;
	}

	if(listen_info->tcp.connect_in_callback){		
		if(-1==listen_info->tcp.connect_in_callback(client_map,&client_addr,(ne_handle)listen_info) ){
			ne_socket_close(newconnect_fd);
			pmanger->deaccept (pmanger,client_map->connect_node.session_id);
			
			pmanger->unlock (pmanger,session_id);
			pmanger->dealloc (client_map,ne_listensrv_get_cmallocator(listen_info));
			return 0 ;
		}
	}
	client_map->connect_node.start_time = ne_time();
	client_map->connect_node.last_recv = ne_time(); 
	INIT_LIST_HEAD(&client_map->map_list) ;
	
	pmanger->unlock (pmanger,client_map->connect_node.session_id);
	return client_map ;

}