From f44003b801097a58968a8036bdfa6669e4dc2456 Mon Sep 17 00:00:00 2001 From: wangyu- Date: Wed, 6 Jun 2018 19:50:42 -0500 Subject: [PATCH] removed server mode --- main.cpp | 930 +------------------------------------------------------ 1 file changed, 7 insertions(+), 923 deletions(-) diff --git a/main.cpp b/main.cpp index 54e6e5e..16cfebe 100755 --- a/main.cpp +++ b/main.cpp @@ -12,11 +12,6 @@ char hb_buf[buf_len]; int on_epoll_recv_event=0; //TODO, just a flag to help detect epoll infinite shoot -int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp_oppsite_const_id); -int server_on_raw_recv_ready(conn_info_t &conn_info,char * ip_port,char type,char *data,int data_len); -int server_on_raw_recv_handshake1(conn_info_t &conn_info,char * ip_port,char * data, int data_len); - - int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is ready in epoll { //keep_iptables_rule(); @@ -272,53 +267,6 @@ int client_on_timer(conn_info_t &conn_info) //for client. called when a timer is } return 0; } -int server_on_timer_multi(conn_info_t &conn_info,char * ip_port) //for server. called when a timer is ready in epoll.for server,there will be one timer for every connection - -{ - //keep_iptables_rule(); - mylog(log_trace,"server timer!\n"); - raw_info_t &raw_info=conn_info.raw_info; - - assert(conn_info.state.server_current_state==server_ready); - - - if(conn_info.state.server_current_state==server_ready) - { - conn_info.blob->conv_manager.clear_inactive(ip_port); - /* - if( get_current_time()-conn_info.last_hb_recv_time>heartbeat_timeout ) - { - mylog(log_trace,"%lld %lld\n",get_current_time(),conn_info.last_state_time); - conn_info.server_current_state=server_nothing; - - //conn_manager.current_ready_ip=0; - //conn_manager.current_ready_port=0; - - mylog(log_info,"changed state to server_nothing\n"); - return 0; - }*/ //dont need to do this at server,conn_manger will clear expired connections - - if(get_current_time()-conn_info.last_hb_sent_time\n",conn_info.my_id,conn_info.oppsite_id); - } - else - { - mylog(log_fatal,"this shouldnt happen!\n"); - myexit(-1); - } - return 0; - -} int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a packet. { char* data;int data_len; @@ -514,527 +462,6 @@ int client_on_raw_recv(conn_info_t &conn_info) //called when raw fd received a p } return 0; } - -int server_on_raw_recv_multi() //called when server received an raw packet -{ - char dummy_buf[buf_len]; - packet_info_t peek_info; - if(peek_raw(peek_info)<0) - { - recv(raw_recv_fd, 0,0, 0 );// - //struct sockaddr saddr; - //socklen_t saddr_size=sizeof(saddr); - ///recvfrom(raw_recv_fd, 0,0, 0 ,&saddr , &saddr_size);// - mylog(log_trace,"peek_raw failed\n"); - return -1; - }else - { - mylog(log_trace,"peek_raw success\n"); - } - u32_t ip=peek_info.src_ip;uint16_t port=peek_info.src_port; - - char ip_port[40]; - sprintf(ip_port,"%s:%d",my_ntoa(ip),port); - mylog(log_trace,"[%s]peek_raw\n",ip_port); - int data_len; char *data; - - if(raw_mode==mode_faketcp&&peek_info.syn==1) - { - if(!conn_manager.exist(ip,port)||conn_manager.find_insert(ip,port).state.server_current_state!=server_ready) - {//reply any syn ,before state become ready - - raw_info_t tmp_raw_info; - if(recv_raw0(tmp_raw_info,data,data_len)<0) - { - return 0; - } - raw_info_t &raw_info=tmp_raw_info; - packet_info_t &send_info=raw_info.send_info; - packet_info_t &recv_info=raw_info.recv_info; - - send_info.src_ip=recv_info.dst_ip; - send_info.src_port=recv_info.dst_port; - - send_info.dst_port = recv_info.src_port; - send_info.dst_ip = recv_info.src_ip; - - if(lower_level) - { - handle_lower_level(raw_info); - } - - if(data_len==0&&raw_info.recv_info.syn==1&&raw_info.recv_info.ack==0) - { - send_info.ack_seq = recv_info.seq + 1; - - send_info.psh = 0; - send_info.syn = 1; - send_info.ack = 1; - send_info.ts_ack=recv_info.ts; - - mylog(log_info,"[%s]received syn,sent syn ack back\n",ip_port); - send_raw0(raw_info, 0, 0); - return 0; - } - } - else - { - recv(raw_recv_fd, 0,0,0); - } - return 0; - } - if(!conn_manager.exist(ip,port)) - { - if(conn_manager.mp.size()>=max_handshake_conn_num) - { - mylog(log_info,"[%s]reached max_handshake_conn_num,ignored new handshake\n",ip_port); - recv(raw_recv_fd, 0,0, 0 );// - return 0; - } - - raw_info_t tmp_raw_info; - - - if(raw_mode==mode_icmp) - { - tmp_raw_info.send_info.dst_port=tmp_raw_info.send_info.src_port=port; - } - if(recv_bare(tmp_raw_info,data,data_len)<0) - { - return 0; - } - if(data_len= 0) { - //u32_t tmp = ntohl(*((u32_t *) &data[sizeof(u32_t)])); - mylog(log_debug,"[%s][hb]received hb \n",ip_port); - conn_info.last_hb_recv_time = get_current_time(); - return 0; - } else if (type== 'd' && data_len >=int( sizeof(u32_t) )) - { - - //u32_t tmp_conv_id = ntohl(*((u32_t *) &data[0])); - id_t tmp_conv_id; - memcpy(&tmp_conv_id,&data[0],sizeof(tmp_conv_id)); - tmp_conv_id=ntohl(tmp_conv_id); - - - if(hb_mode==0) - conn_info.last_hb_recv_time = get_current_time(); - - mylog(log_trace, "conv:%u\n", tmp_conv_id); - if (!conn_info.blob->conv_manager.is_conv_used(tmp_conv_id)) { - if (conn_info.blob->conv_manager.get_size() >= max_conv_num) { - mylog(log_warn, - "[%s]ignored new conv %x connect bc max_conv_num exceed\n",ip_port, - tmp_conv_id); - return 0; - } - - struct sockaddr_in remote_addr_in={0}; - - socklen_t slen = sizeof(sockaddr_in); - //memset(&remote_addr_in, 0, sizeof(remote_addr_in)); - remote_addr_in.sin_family = AF_INET; - remote_addr_in.sin_port = htons(remote_port); - remote_addr_in.sin_addr.s_addr = remote_ip_uint32; - - int new_udp_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); - if (new_udp_fd < 0) { - mylog(log_warn, "[%s]create udp_fd error\n",ip_port); - return -1; - } - setnonblocking(new_udp_fd); - set_buf_size(new_udp_fd,socket_buf_size,force_socket_buf); - - mylog(log_debug, "[%s]created new udp_fd %d\n",ip_port, new_udp_fd); - int ret = connect(new_udp_fd, (struct sockaddr *) &remote_addr_in, - slen); - if (ret != 0) { - mylog(log_warn, "udp fd connect fail\n"); - close(new_udp_fd); - return -1; - } - struct epoll_event ev; - - fd64_t new_udp_fd64 = fd_manager.create(new_udp_fd); - fd_manager.get_info(new_udp_fd64).p_conn_info=&conn_info; - - mylog(log_trace, "[%s]u64: %lld\n",ip_port, new_udp_fd64); - ev.events = EPOLLIN; - - ev.data.u64 = new_udp_fd64; - - ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, new_udp_fd, &ev); - - if (ret != 0) { - mylog(log_warn, "[%s]add udp_fd error\n",ip_port); - close(new_udp_fd); - return -1; - } - - conn_info.blob->conv_manager.insert_conv(tmp_conv_id, new_udp_fd64); - - - - //assert(conn_manager.udp_fd_mp.find(new_udp_fd)==conn_manager.udp_fd_mp.end()); - - //conn_manager.udp_fd_mp[new_udp_fd] = &conn_info; - - //pack_u64(conn_info.raw_info.recv_info.src_ip,conn_info.raw_info.recv_info.src_port); - - mylog(log_info, "[%s]new conv conv_id=%x, assigned fd=%d\n",ip_port, - tmp_conv_id, new_udp_fd); - - - - } - - fd64_t fd64 = conn_info.blob->conv_manager.find_u64_by_conv(tmp_conv_id); - - conn_info.blob->conv_manager.update_active_time(tmp_conv_id); - - int fd = fd_manager.to_fd(fd64); - - mylog(log_trace, "[%s]received a data from fake tcp,len:%d\n",ip_port, data_len); - int ret = send(fd, data + sizeof(u32_t), - data_len - ( sizeof(u32_t)), 0); - - mylog(log_trace, "[%s]%d byte sent ,fd :%d\n ",ip_port, ret, fd); - if (ret < 0) { - mylog(log_warn, "send returned %d\n", ret); - //perror("what happened????"); - } - return 0; - } - return 0; -} - -int server_on_raw_recv_pre_ready(conn_info_t &conn_info,char * ip_port,u32_t tmp_oppsite_const_id)// do prepare work before state change to server ready for a specifc connection -//connection recovery is also handle here -{ - //u32_t ip;uint16_t port; - //ip=conn_info.raw_info.recv_info.src_ip; - //port=conn_info.raw_info.recv_info.src_port; - //char ip_port[40]; - //sprintf(ip_port,"%s:%d",my_ntoa(ip),port); - - mylog(log_info,"[%s]received handshake oppsite_id:%x my_id:%x\n",ip_port,conn_info.oppsite_id,conn_info.my_id); - - mylog(log_info,"[%s]oppsite const_id:%x \n",ip_port,tmp_oppsite_const_id); - if(conn_manager.const_id_mp.find(tmp_oppsite_const_id)==conn_manager.const_id_mp.end()) - { - //conn_manager.const_id_mp= - - if(conn_manager.ready_num>=max_ready_conn_num) - { - mylog(log_info,"[%s]max_ready_conn_num,cant turn to ready\n",ip_port); - conn_info.state.server_current_state =server_idle; - return 0; - } - - conn_info.prepare(); - conn_info.state.server_current_state = server_ready; - conn_info.oppsite_const_id=tmp_oppsite_const_id; - conn_manager.ready_num++; - conn_manager.const_id_mp[tmp_oppsite_const_id]=&conn_info; - - - //conn_info.last_state_time=get_current_time(); //dont change this!!!!!!!!!!!!!!!!!!!!!!!!! - - //conn_manager.current_ready_ip=ip; - //conn_manager.current_ready_port=port; - - //my_id=conn_info.my_id; - //oppsite_id=conn_info.oppsite_id; - conn_info.last_hb_recv_time = get_current_time(); - - conn_info.last_hb_sent_time = conn_info.last_hb_recv_time;//=get_current_time() - - if(hb_mode==0) - send_safer(conn_info,'h',hb_buf,0);/////////////send - else - send_safer(conn_info,'h',hb_buf,hb_len); - - mylog(log_info, "[%s]changed state to server_ready\n",ip_port); - conn_info.blob->anti_replay.re_init(); - - //g_conn_info=conn_info; - int new_timer_fd; - set_timer_server(epollfd, new_timer_fd,conn_info.timer_fd64); - - fd_manager.get_info(conn_info.timer_fd64).p_conn_info=&conn_info; - //assert(conn_manager.timer_fd_mp.find(new_timer_fd)==conn_manager.timer_fd_mp.end()); - //conn_manager.timer_fd_mp[new_timer_fd] = &conn_info;//pack_u64(ip,port); - - - //timer_fd_mp[new_timer_fd] - /* - if(oppsite_const_id!=0&&tmp_oppsite_const_id!=oppsite_const_id) //TODO MOVE TO READY - { - mylog(log_info,"cleared all conv bc of const id doesnt match\n"); - conv_manager.clear(); - }*/ - //oppsite_const_id=tmp_oppsite_const_id; - } - else - { - - conn_info_t &ori_conn_info=*conn_manager.const_id_mp[tmp_oppsite_const_id]; - - if(ori_conn_info.state.server_current_state==server_ready) - { - if(conn_info.last_state_timeanti_replay.re_init(); - if(hb_mode==0) - send_safer(ori_conn_info,'h',hb_buf,0);/////////////send - else - send_safer(ori_conn_info,'h',hb_buf,hb_len); - - ori_conn_info.last_hb_recv_time=get_current_time(); - - - - conn_info.state.server_current_state=server_idle; - conn_info.oppsite_const_id=0; - - } - else - { - mylog(log_fatal,"[%s]this should never happen\n",ip_port); - myexit(-1); - } - return 0; - } - return 0; -} - int client_event_loop() { @@ -1398,325 +825,6 @@ int client_event_loop() return 0; } -int server_event_loop() -{ - char buf[buf_len]; - - int i, j, k;int ret; - - bind_address_uint32=local_ip_uint32;//only server has bind adress,client sets it to zero - - if(lower_level) - { - if(lower_level_manual) - { - init_ifindex(if_name,ifindex); - mylog(log_info,"we are running at lower-level (manual) mode\n"); - } - else - { - mylog(log_info,"we are running at lower-level (auto) mode\n"); - } - - } - - if(raw_mode==mode_faketcp) - { - bind_fd=socket(AF_INET,SOCK_STREAM,0); - } - else if(raw_mode==mode_udp||raw_mode==mode_icmp)//bind an adress to avoid collision,for icmp,there is no port,just bind a udp port - { - bind_fd=socket(AF_INET,SOCK_DGRAM,0); - } - - struct sockaddr_in temp_bind_addr={0}; - // bzero(&temp_bind_addr, sizeof(temp_bind_addr)); - - temp_bind_addr.sin_family = AF_INET; - temp_bind_addr.sin_port = htons(local_port); - temp_bind_addr.sin_addr.s_addr = local_ip_uint32; - - if (bind(bind_fd, (struct sockaddr*)&temp_bind_addr, sizeof(temp_bind_addr)) !=0) - { - mylog(log_fatal,"bind fail\n"); - myexit(-1); - } - - if(raw_mode==mode_faketcp) - { - - if(listen(bind_fd, SOMAXCONN) != 0 ) - { - mylog(log_fatal,"listen fail\n"); - myexit(-1); - } - } - - - - //init_raw_socket(); - init_filter(local_port);//bpf filter - - epollfd = epoll_create1(0); - const int max_events = 4096; - - struct epoll_event ev, events[max_events]; - if (epollfd < 0) { - mylog(log_fatal,"epoll return %d\n", epollfd); - myexit(-1); - } - - ev.events = EPOLLIN; - ev.data.u64 = raw_recv_fd; - - ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, raw_recv_fd, &ev); - if (ret!= 0) { - mylog(log_fatal,"add raw_fd error\n"); - myexit(-1); - } - int timer_fd; - - set_timer(epollfd,timer_fd); - - u64_t begin_time=0; - u64_t end_time=0; - - mylog(log_info,"now listening at %s:%d\n",my_ntoa(local_ip_uint32),local_port); - - int fifo_fd=-1; - - if(fifo_file[0]!=0) - { - fifo_fd=create_fifo(fifo_file); - ev.events = EPOLLIN; - ev.data.u64 = fifo_fd; - - ret = epoll_ctl(epollfd, EPOLL_CTL_ADD, fifo_fd, &ev); - if (ret!= 0) { - mylog(log_fatal,"add fifo_fd to epoll error %s\n",strerror(errno)); - myexit(-1); - } - mylog(log_info,"fifo_file=%s\n",fifo_file); - } - - - while(1)//////////////////////// - { - - if(about_to_exit) myexit(0); - - int nfds = epoll_wait(epollfd, events, max_events, 180 * 1000); - if (nfds < 0) { //allow zero - if(errno==EINTR ) - { - mylog(log_info,"epoll interrupted by signal,continue\n"); - //myexit(0); - } - else - { - mylog(log_fatal,"epoll_wait return %d,%s\n", nfds,strerror(errno)); - myexit(-1); - } - } - int idx; - for (idx = 0; idx < nfds; ++idx) - { - //mylog(log_debug,"ndfs: %d \n",nfds); - epoll_trigger_counter++; - //printf("%d %d %d %d\n",timer_fd,raw_recv_fd,raw_send_fd,n); - if ((events[idx].data.u64 ) == (u64_t)timer_fd) - { - if(debug_flag)begin_time=get_current_time(); - conn_manager.clear_inactive(); - u64_t dummy; - read(timer_fd, &dummy, 8); - //current_time_rough=get_current_time(); - if(debug_flag) - { - end_time=get_current_time(); - mylog(log_debug,"timer_fd,%llu,%llu,%llu\n",begin_time,end_time,end_time-begin_time); - } - - mylog(log_trace,"epoll_trigger_counter: %d \n",epoll_trigger_counter); - epoll_trigger_counter=0; - - } - else if (events[idx].data.u64 == (u64_t)raw_recv_fd) - { - if(debug_flag)begin_time=get_current_time(); - server_on_raw_recv_multi(); - if(debug_flag) - { - end_time=get_current_time(); - mylog(log_debug,"raw_recv_fd,%llu,%llu,%llu \n",begin_time,end_time,end_time-begin_time); - } - } - else if (events[idx].data.u64 == (u64_t)fifo_fd) - { - int len=read (fifo_fd, buf, sizeof (buf)); - if(len<0) - { - mylog(log_warn,"fifo read failed len=%d,errno=%s\n",len,strerror(errno)); - continue; - } - //assert(len>=0); - buf[len]=0; - while(len>=1&&buf[len-1]=='\n') - buf[len-1]=0; - mylog(log_info,"got data from fifo,len=%d,s=[%s]\n",len,buf); - mylog(log_info,"unknown command\n"); - } - else if (events[idx].data.u64>u32_t(-1) ) - { - - fd64_t fd64=events[idx].data.u64; - - if(!fd_manager.exist(fd64)) - { - mylog(log_trace ,"fd64 no longer exist\n"); - continue; - } - - assert(fd_manager.exist_info(fd64)); - - conn_info_t* p_conn_info=fd_manager.get_info(fd64).p_conn_info; - u32_t ip=p_conn_info->raw_info.send_info.dst_ip; - u32_t port=p_conn_info->raw_info.send_info.dst_port; - - //assert(conn_manager.exist(ip,port)); - - ///conn_info_t* p_conn_info=conn_manager.find_insert_p(ip,port); - - - if(fd64==p_conn_info->timer_fd64)//////////timer_fd64 - { - - if(debug_flag)begin_time=get_current_time(); - //int fd=get_u64_l(events[idx].data.u64); - int fd=fd_manager.to_fd(fd64); - u64_t dummy; - read(fd, &dummy, 8); - - /*if(conn_manager.timer_fd_mp.find(fd)==conn_manager.timer_fd_mp.end()) //this can happen,when fd is a just closed fd - { - mylog(log_info,"timer_fd no longer exits\n"); - continue; - }*/ - //conn_info_t* p_conn_info=conn_manager.timer_fd_mp[fd]; - //u32_t ip=p_conn_info->raw_info.recv_info.src_ip; - //u32_t port=p_conn_info->raw_info.recv_info.src_port; - //assert(conn_manager.exist(ip,port));//TODO remove this for peformance - - assert(p_conn_info->state.server_current_state == server_ready); //TODO remove this for peformance - - //conn_info_t &conn_info=conn_manager.find(ip,port); - char ip_port[40]; - - sprintf(ip_port,"%s:%d",my_ntoa(ip),port); - - server_on_timer_multi(*p_conn_info,ip_port); - - if(debug_flag) - { - end_time=get_current_time(); - mylog(log_debug,"(events[idx].data.u64 >>32u) == 2u ,%llu,%llu,%llu \n",begin_time,end_time,end_time-begin_time); - } - - } - else//udp_fd64 - { - //} - //else if ((events[idx].data.u64 >>32u) == 1u) - //{ - //uint32_t conv_id=events[n].data.u64>>32u; - - if(debug_flag)begin_time=get_current_time(); - - //int fd=int((events[idx].data.u64<<32u)>>32u); - - /* - if(conn_manager.udp_fd_mp.find(fd)==conn_manager.udp_fd_mp.end()) //this can happen,when fd is a just closed fd - { - mylog(log_debug,"fd no longer exists in udp_fd_mp,udp fd %d\n",fd); - recv(fd,0,0,0); - continue; - }*/ - //conn_info_t* p_conn_info=conn_manager.udp_fd_mp[fd]; - - //u32_t ip=p_conn_info->raw_info.recv_info.src_ip; - //u32_t port=p_conn_info->raw_info.recv_info.src_port; - - /*if(!conn_manager.exist(ip,port))//TODO remove this for peformance - { - mylog(log_fatal,"ip port no longer exits 2!!!this shouldnt happen\n"); - myexit(-1); - }*/ - - if(p_conn_info->state.server_current_state!=server_ready)//TODO remove this for peformance - { - mylog(log_fatal,"p_conn_info->state.server_current_state!=server_ready!!!this shouldnt happen\n"); - myexit(-1); - } - - conn_info_t &conn_info=*p_conn_info; - - assert(conn_info.blob->conv_manager.is_u64_used(fd64)); - - u32_t conv_id=conn_info.blob->conv_manager.find_conv_by_u64(fd64); - - int fd=fd_manager.to_fd(fd64); - - int recv_len=recv(fd,buf,max_data_len+1,0); - - mylog(log_trace,"received a packet from udp_fd,len:%d\n",recv_len); - - if(recv_len==max_data_len+1) - { - mylog(log_warn,"huge packet, data_len > %d,dropped\n",max_data_len); - continue; - } - - if(recv_len<0) - { - mylog(log_debug,"udp fd,recv_len<0 continue,%s\n",strerror(errno)); - - continue; - } - - if(recv_len>=mtu_warn) - { - mylog(log_warn,"huge packet,data len=%d (>=%d).strongly suggested to set a smaller mtu at upper level,to get rid of this warn\n ",recv_len,mtu_warn); - } - - //conn_info.conv_manager->update_active_time(conv_id); server dosnt update from upd side,only update from raw side. (client updates at both side) - - if(conn_info.state.server_current_state==server_ready) - { - send_data_safer(conn_info,buf,recv_len,conv_id); - //send_data(g_packet_info_send,buf,recv_len,my_id,oppsite_id,conv_id); - mylog(log_trace,"send_data_safer ,sent !!\n"); - } - - if(debug_flag) - { - end_time=get_current_time(); - mylog(log_debug,"(events[idx].data.u64 >>32u) == 1u,%lld,%lld,%lld \n",begin_time,end_time,end_time-begin_time); - } - - - } - } - else - { - mylog(log_fatal,"unknown fd,this should never happen\n"); - myexit(-1); - } - - } - } - return 0; -} - /* int test() { @@ -1761,37 +869,11 @@ int main(int argc, char *argv[]) local_ip_uint32=inet_addr(local_ip); source_ip_uint32=inet_addr(source_ip); -#if ENABLE_DNS_RESOLVE + //strncpy(remote_ip,remote_address,sizeof(remote_ip)-1); + mylog(log_info,"remote_ip=[%s], make sure this is a vaild IP address\n",remote_ip); + strcpy(remote_ip,remote_address); + remote_ip_uint32=inet_addr(remote_ip); - //if(enable_dns_resolve) - //{ - - struct hostent *he; - if ( (he = gethostbyname(remote_address) ) == NULL ) { - mylog(log_error,"Unable to resolve hostname: %s, error:%s \n",remote_address,hstrerror(h_errno) ); - myexit(1); /* error */ - } - struct in_addr **addr_list = (struct in_addr **)he->h_addr_list; - assert( he->h_addrtype ==AF_INET); - assert(addr_list!=NULL); - - remote_ip_uint32=(*addr_list[0]).s_addr; - mylog(log_info,"remote_address[%s] has been resolved to [%s]\n",remote_address, my_ntoa(remote_ip_uint32)); - - - strcpy(remote_ip,my_ntoa(remote_ip_uint32)); - - //} - //else - -#else - { - //strncpy(remote_ip,remote_address,sizeof(remote_ip)-1); - mylog(log_info,"remote_ip=[%s], make sure this is a vaild IP address\n",remote_ip); - strcpy(remote_ip,remote_address); - remote_ip_uint32=inet_addr(remote_ip); - } -#endif //current_time_rough=get_current_time(); @@ -1827,7 +909,9 @@ int main(int argc, char *argv[]) } else { - server_event_loop(); + mylog(log_fatal,"server mode not supported in portable version\n"); + myexit(-1); + //server_event_loop(); } return 0;