zoukankan      html  css  js  c++  java
  • libevent显式调用事件处理

            while (1)
            {
                    SearchAcceptListen2(p_ev_arg->listen_fd,0,&notify_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);
    
            }
    
    }
  • 相关阅读:
    Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
    Django的ORM操作
    RabbitMQ
    CentOS忘记用户名或者密码解决办法
    VUE-es6
    vue基础之命令
    爬虫框架:scrapy
    爬虫高性能相关
    MongoDB
    Beautifulsoup模块
  • 原文地址:https://www.cnblogs.com/dodng/p/7235881.html
Copyright © 2011-2022 走看看