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 );

  • 相关阅读:
    ES6变量的解构赋值
    ES6新增内容
    Rvalue references
    range-based for statement
    Space in Template Expression, nullptr, and auto
    Type Alias、noexcept、override、final
    Variadic Template
    =default =delete
    为什么不要特化函数模版?
    boost::noncopyable 的作用
  • 原文地址:https://www.cnblogs.com/DreamKill/p/13260360.html
Copyright © 2011-2022 走看看