V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zorceta
V2EX  ›  Linux

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

  •  
  •   zorceta · Sep 18, 2013 via Android · 3423 views
    This topic created in 4607 days ago, the information mentioned may be changed or developed.
    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 replies    1970-01-01 08:00:00 +08:00
    nybux
        1
    nybux  
       Sep 18, 2013   ❤️ 1
    不需要EPOLL_CTL_DEL,除非你不想再关注这个socket
    1.对的
    2.不会有性能影响
    zorceta
        2
    zorceta  
    OP
       Sep 18, 2013 via Android
    @nybux 嗯,例子里在accepted socket处理完后会关闭,注释里说明了epoll会自动移除。是我没认真看。
    allenforrest
        3
    allenforrest  
       Sep 18, 2013 via iPhone
    其实我喜欢LT模式,ET模式并不好用,性能也未必比LT高
    zorceta
        4
    zorceta  
    OP
       Sep 19, 2013 via Android
    @allenforrest 我没倾向哪一个啊
    很多人认为ET高负载比LT好而已
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1184 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 17:38 · PVG 01:38 · LAX 10:38 · JFK 13:38
    ♥ Do have faith in what you're doing.