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

2013-09-18 09:55:05 +08:00
 zorceta
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 好淫荡 搜索先显示一个勾引你收藏的页面 再点一次才能到结果页
2954 次点击
所在节点    Linux
4 条回复
nybux
2013-09-18 10:05:36 +08:00
不需要EPOLL_CTL_DEL,除非你不想再关注这个socket
1.对的
2.不会有性能影响
zorceta
2013-09-18 10:19:36 +08:00
@nybux 嗯,例子里在accepted socket处理完后会关闭,注释里说明了epoll会自动移除。是我没认真看。
allenforrest
2013-09-18 21:36:51 +08:00
其实我喜欢LT模式,ET模式并不好用,性能也未必比LT高
zorceta
2013-09-19 07:38:01 +08:00
@allenforrest 我没倾向哪一个啊
很多人认为ET高负载比LT好而已

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82875

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX