while (1) { SearchAcceptListen2(p_ev_arg->listen_fd,0,¬ify_event,base); event_base_loop(base, EVLOOP_NONBLOCK); }
其中调用函数的实现是
void SearchAcceptListen2(int fd, short what, void *arg, struct event_base *p_base) { struct event *p_ev = (struct event *)arg; char log_buff[128] = {0}; struct sockaddr_in sin; socklen_t len = sizeof(struct sockaddr_in); int accept_fd = 0; //accept lock pthread_mutex_lock(&g_search_port_lock); accept_fd = accept(fd, (struct sockaddr*)&sin, &len); pthread_mutex_unlock(&g_search_port_lock); if (accept_fd > 0) { int iret = 0; if((iret = fcntl(accept_fd, F_SETFL, O_NONBLOCK)) < 0) { snprintf(log_buff,sizeof(log_buff),"%s fd=%d: fcntl nonblocking error:%d", __func__, accept_fd, iret); g_log.write_record(log_buff); return; } struct interface_data *p_read_it = it_pool_get(); // add a read event for receive data p_read_it->sd = accept_fd; gettimeofday(&p_read_it->l_time[0],0); reg_add_event(&(p_read_it->ev),accept_fd,EV_READ,RecvData,p_read_it,p_base,&tv_recv_timeout); snprintf(log_buff,sizeof(log_buff),"Thread[%x] process thread read new client fd[%d]", (int)pthread_self(), accept_fd); g_log.write_record(log_buff); } else { // snprintf(log_buff,sizeof(log_buff),"%s[%d] %s:accept error return:%d, errno:%d", __FILE__,__LINE__,__func__,accept_fd,errno); // g_log.write_record(log_buff); } }