V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zorceta
V2EX  ›  Linux

这样理解这个epoll例子对不对?

  •  
  •   zorceta · 2013-09-18 09:55:05 +08:00 via Android · 3027 次点击
    这是一个创建于 4079 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://banu.com/blog/2/how-to-use-epoll-a-complete-example-in-c/ 这个

    epoll_create创建一个epoll监控队列
    epoll_ctl EPOLL_CTL_ADD把主socket加入队列,在有连接进来时返回事件
    返回事件后判断是否有错误产生
    没有错误则检查每个事件 如果事件属于主socket[1],这表明有连接过来,把accept的socket加入队列
    如果事件是accept的socket,表明有数据到了,循环读取直到缓冲区被取空,然后epoll_ctl EPOLL_CTL_DEL把accept的socket移出队列
    进入下一次循环

    [1]这里检查应该是用来区分主socket和accepted socket吧?

    如果有错,还请指正:)

    另外,man上说ET模式可以EPOLLIN|EPOLLOUT,这样对效率会有影响吗?

    p.s.吐槽下Google 好淫荡 搜索先显示一个勾引你收藏的页面 再点一次才能到结果页
    4 条回复    1970-01-01 08:00:00 +08:00
    nybux
        1
    nybux  
       2013-09-18 10:05:36 +08:00   ❤️ 1
    不需要EPOLL_CTL_DEL,除非你不想再关注这个socket
    1.对的
    2.不会有性能影响
    zorceta
        2
    zorceta  
    OP
       2013-09-18 10:19:36 +08:00 via Android
    @nybux 嗯,例子里在accepted socket处理完后会关闭,注释里说明了epoll会自动移除。是我没认真看。
    allenforrest
        3
    allenforrest  
       2013-09-18 21:36:51 +08:00 via iPhone
    其实我喜欢LT模式,ET模式并不好用,性能也未必比LT高
    zorceta
        4
    zorceta  
    OP
       2013-09-19 07:38:01 +08:00 via Android
    @allenforrest 我没倾向哪一个啊
    很多人认为ET高负载比LT好而已
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2975 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 14:51 · PVG 22:51 · LAX 06:51 · JFK 09:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.