epoll 基础API

1.创建一个epoll句柄,参数size用来告诉内核监听的文件描述符的个数,跟内存大小有关。
#include <sys/epoll.h>
int epoll_create(int size)  size:监听数目
2. 控制某个epoll监控的文件描述符上的事件:注册、修改、删除。
#include <sys/epoll.h>
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
    epfd:   为epoll_creat的句柄
    op:     表示动作,用3个宏来表示:
        EPOLL_CTL_ADD (注册新的fd到epfd),
        EPOLL_CTL_MOD (修改已经注册的fd的监听事件),
        EPOLL_CTL_DEL (从epfd删除一个fd);
    event:  告诉内核需要监听的事件

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

    EPOLLIN :   表示对应的文件描述符可以读(包括对端SOCKET正常关闭)
    EPOLLOUT:   表示对应的文件描述符可以写
    EPOLLPRI:   表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来)
    EPOLLERR:   表示对应的文件描述符发生错误
    EPOLLHUP:   表示对应的文件描述符被挂断;
    EPOLLET:    将EPOLL设为边缘触发(Edge Triggered)模式,这是相对于水平触发(Level Triggered)而言的
    EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里
3.等待所监控文件描述符上有事件的产生,类似于select()调用。
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout)
    events:     用来存内核得到事件的集合,
    maxevents:  告之内核这个events有多大,这个maxevents的值不能大于创建epoll_create()时的size,
    timeout:    是超时时间
        -1: 阻塞
        0:  立即返回,非阻塞
        >0: 指定毫秒
    返回值:    成功返回有多少文件描述符就绪,时间到时返回0,出错返回-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值