epoll的核心操作

epoll的核心是下面的函数

epoll_ctl:用于将待监听的端口和放入(或移除)监听对象中。这个函数两个关键的输入为,1、待监听的接口,2、该接口在io事件发生后,操作系统接口返回给用户对应这个接口的数据。

将端口加入监听的

{

    struct epoll_event epv = {0, {0}};

    int op;

    void *data = malloc(10);

   

    epv.data.ptr = data;

    epv.events = EPOLLIN|EPOLLET;

    op = EPOLL_CTL_ADD;

 

    if(epoll_ctl(epollFd, op, watchfd, &epv) < 0)

        printf("Event Add failed[fd=%d]\n", ev->fd);

    else

        printf("Event Add OK[fd=%d]\n", ev->fd);

}

epollFd是epoll的文件id,op是要进行的操作(此例中为ADD操作),watchfd是被监听的端口,epv是和watchfd对应的信息,其中包括和watchfd进行关联的指针(data)和监听的事件(EPOLLIN|EPOLLET),在watchfd的文件描述符的事件触发后出返回和其对应的epv内容。

 

 

epoll_wait:用于进行监听的

等待事件发生的代码

{

#define MAX_EVENTS 10

    int fds ;

    struct epoll_event events[MAX_EVENTS];

         void    *data

 

    fds = epoll_wait(epollFd, events, MAX_EVENTS, -1);

    for (int i = 0; i < fds; i++)

    {

        data = events[i].data.ptr;

                 //后续根据data获得端口,并进行消息处理

    }

}

epoll_wait在events数组中返回的是用户使用epoll_ctl在绑定端口时的epoll_event的内容,epoll_wait最多可以返回用户指定的“MAX_EVENTS”个有事件发生的IO文件描述符

 

epoll_create:用于创建epoll的函数

posted @ 2012-07-03 09:36  惡盈好謙  阅读(239)  评论(0编辑  收藏  举报