linux非同步通訊之epoll

來源:互聯網
上載者:User

1、簡介

epoll是linux提供的一種非同步I/O通知方式,相比較於select機制而言,select是輪詢的,而epoll是觸發式的,而且select的最大串連數只有1024,超過這個限制後就只能使用多進程來操作了。所以epoll的效率相對而言更高。

2、主要函數

epoll_create      建立epoll

epoll_ctl      把某個控制代碼添加到epoll裡面

epoll_wait      等待epoll事件的產生。只要註冊的控制代碼發生了變化即會檢查到有epoll事件的產生。

3、主要流程

    /* 建立EPOLL*/    iEpollFd = epoll_create(MYPING_EPOLLEVENT_MAX);

    /* 設定sicket選項 */
    stServaddr.ucLen = sizeof(stServaddr);    stServaddr.ucFamily = (UCHAR)AF_LIPC;    stServaddr.usPort   = htons(LIPC_GLOBAL_PORT_MYPING);    stServaddr.usAddr   = htons(LIPC_LIP_ADDR_ANY);    /* 建立 socket */    iLipcFd = socket(PF_LIPC, SOCK_DGRAM, LIPC_PROTO_STCP);

    /* bind socket */    iRet += bind(iLipcFd, (struct sockaddr *)(&stServaddr), (UINT)sizeof(LIPC_SOCK_ADDR_S));        /* listen socket */    iRet += listen(iLipcFd, SOMAXCONN);    /* bind or listen error */    if(0 != iRet)    {        printf("bind or listen socket failed\r\n");        (VOID)close(iLipcFd);        return ERROR_FAILED;    }    /* regist socket to epoll */    iRet = MYPING_EpollReg(EPOLLIN, iLipcFd, MYPING_LipcListenCallback);    if(0 != iRet)    {        printf("regist lipc socket to epoll failed\r\n");        (VOID)close(iLipcFd);        return ERROR_FAILED;    }
    /* 等待事件的產生 */
    for(;;)    {        /* this will be blocked until any registered event happend or timeout */        iNfds = epoll_wait(g_iEpollHandle, astEpEvt, MYPING_EPOLLEVENT_MAX, -1);        /* 輪詢產生的事件 */        for(i = 0; i < iNfds; i ++)        {            /* 擷取註冊的回呼函數 */            pfCallback = (VOID *)(ULONG)astEpEvt[i].callback;            /* 調用相關的回呼函數進行處理  */            pfCallback(astEpEvt[i].events, astEpEvt[i].data.fd);        }    }

4、機制

實際上一般先在epoll上面註冊一個監聽的socket,當這個socket監聽到有資料連線時,即建立一個新的socket來接收資料,然後把這個新的socket的控制代碼註冊到epoll上面去,再在這個 socket的回呼函數裡面來做相應的處理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.