zoukankan      html  css  js  c++  java
  • epoll

    eppll 即使使用ET模式,一个socket上的某个事件还是可能被触发多次,采用线程城池的方式来处理事件,可能一个socket同时被多个线程处理

    如果对描述符socket注册了EPOLLONESHOT事件,那么操作系统最多触发其上注册的一个可读、可写或者异常事件,且只触发一次。。想要下次再触发则必须使用epoll_ctl重置该描述符上注册的事件,包括EPOLLONESHOT 事件。

    EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里 

    例子:

            epoll_event event;

            event..data.fd=fd;

            evnet.events=EPOLLIN | EPOLLT |EPOOLLONESHOT

           epoll_ctl( epollfd,EPOLL_CTL_ADD , fd , &event );// 第一次添加

    epoll_wait 返回, 处理fd的读事件,一直读一直读,读到没有数据 ( errno==EAGAIN) ,这时才重置fd上的事件 


            epoll_event event;

            event..data.fd=fd;

            evnet.events=EPOLLIN | EPOLLT |EPOOLLONESHOT

           epoll_ctl( epollfd,EPOLL_CTL_MOD , fd , &event );

  • 相关阅读:
    动态规划最后一击
    leetcode N-Queens I && N-Queens II
    leetcode Spiral Matrix
    leetcode Submission Details
    由网易云音乐到算法体会
    leetcode Rotate Image
    线性表之双链表
    线性表之循环单链表
    线性表之单链表
    [HDU] 1561 The more, The Better 树形DP加01分组背包
  • 原文地址:https://www.cnblogs.com/DreamKill/p/13260360.html
Copyright © 2011-2022 走看看