Linux-网络编程之Epoll_只是个笔记

注意EPOLLOUT和EPOLLIN事件不要同时注册。
如果同时注册,那么当有EPOLLIN事件时也会产生EPOLLOUT事件。

情况一(同时注册 EPOLLIN 和 EPOLLOUT 事件,并且缓冲区是满的): 主要是服务端接收客户端的请求,然后回写大小为 1024000 字节的字符串(客户端并不接收回写数据),一直到把缓冲区撑满了,这时将事件注册为(EPOLLIN | EPOLLOUT),客户端再继续发请求。
可以观察到的结果是,EPOLLIN 事件被触发了,但是 EPOLLOUT 事件并未触发(此时缓冲区仍然是满的状态)。当客户端开始接收数据时,EPOLLOUT 这时被触发(缓冲区数据被读走)。
情况二(同时注册 EPOLLIN 和 EPOLLOUT 事件,缓冲区未满):上面的实验继续,客户端将所有的数据接收到,服务器发送缓冲区为未满状态,但是未移除 EPOLLOUT 事件,客户端在继续发送请求时,会同时触发 EPOLLIN 和 EPOLLOUT 事件!注意这里并不存在(满到未满的变化),只要有 EPOLLIN 的事件就会顺便携带一次 EPOLLOUT 的标志。还会额外触发一次 EPOLLOUT 事件,这样的话就进入两次的 EPOLLOUT 判断中。
也就是这种情况下,会触发两个事件,一个是由描述符可读发生的 EPOLLIN 事件并且该事件也携带了 EPOLLOUT 标志,另一个就是单独携带 EPOLLOUT 标志的可写事件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,073评论 19 139
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,637评论 0 6
  • 在地球上,有许多神秘的地方,例如大西洋的百慕大三角,然而,在陆地上,我们的公路也一样神秘,但愿在遥远的未来,我们能...
    路听车说阅读 459评论 0 0
  • 目标 目标是你想要得到的东西。 目标有大目标小目标之分。 大目标是由一个个小目标迭加的 我这里的是个小目标,在固定...
    大麦茶的故事阅读 301评论 0 0
  • 直行难,回头也难,左转难,右转也难。 不可不聪明行事。
    静宜园主阅读 156评论 0 0

友情链接更多精彩内容