码迷,mamicode.com
首页 > 其他好文 > 详细

epoll - 其一

时间:2016-08-04 19:18:05      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

头文件:#include <sys/epoll.h>

一.eopll相关的函数:

1.int epoll_create(int size);

  返回一个epoll句柄,参数size是可监听的最大个数

2.int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

  参数一epfd是epoll_create()出来到句柄。

  参数二op可以取三个宏中到其一:

    EPOLL_CTL_ADD:注册新的fd到epfd中;
    EPOLL_CTL_MOD:修改已经注册的fd的监听事件;
    EPOLL_CTL_DEL:从epfd中删除一个fd;

  参数三fd是要监听的fd。

  参数四event是设置监听到模式(ET模式,LT模式,write事件,read事件,accept事件)

    相关结构体如下:

        typedef union epoll_data {
          void *ptr;
          int fd;
          __uint32_t u32;
          __uint64_t u64;
        } epoll_data_t;
 
        struct epoll_event {
          __uint32_t events; /* Epoll events */
          epoll_data_t data; /* User data variable */
        };

      events可以是以下几个宏的集合:
        EPOLLIN :表示对应的文件描述符可以读(包括对端SOCKET正常关闭);
        EPOLLOUT:表示对应的文件描述符可以写;
        EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);
        EPOLLERR:表示对应的文件描述符发生错误;
        EPOLLHUP:表示对应的文件描述符被挂断;
        EPOLLET: 将EPOLL设为边缘触发(Edge Triggered)模式,这是相对于水平触发(Level Triggered)来说的。
        EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里。

     epoll_event.data.fd是要监听到fd,一般设置epoll_event.data.fd和epoll_event.events就足够了。

3. int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);

  返回值是触发事件到个数,如返回0表示已超时。

  参数一epfd是epoll_create()出来到句柄。

  参数二events是一个epoll_event类型的数组。

  参数三maxevents的值不能大于创建epoll_create()时的size。

  参数四timeout是超时时间(毫秒,0会立即返回,-1将不确定,永久阻塞)。

4.close(int fd)

   关闭句柄。

参考:

blog.csdn.net/ljx0305/article/details/4065058

http://www.cnblogs.com/aicro/archive/2012/12/27/2836170.html

http://blog.csdn.net/dodo_check/article/details/8553265

epoll - 其一

标签:

原文地址:http://www.cnblogs.com/jinfei/p/5737697.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!