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; }
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); } }
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; }
/* 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 ; }