【Linux】IO多路复用--poll函数基本处理流程

poll–函数在服务端流程图

在这里插入图片描述


  1. 当我们的已连接套接字时间就绪,也就是connfd已连接套接字读事件就绪时候,那么我们就要读取接受缓冲区的数据,但是我们不能保证我们一次读取就能够读完,所以我们需要循环读取,那么就需要在应用层设置一个该connfd对应的接受缓冲区;然后应用层再从接受缓冲区读取数据进行业务逻辑处理;
  2. 当我们处理完毕connfd已连接套接字的读事件之后,需要响应数据(该数据就是对读到的数据进行处理过后的数据)给客户端(先调用write函数写入内核的发送缓冲区,再由内核TCP层进行将发送缓冲区数据发给客户端),此时,我们不能保证我们响应回去的数据能够通过一次wirte函数就进行写完到内核发送缓冲区,因为有可能我们只写了一定的字节数而没有写完,也有可能我们的内核发送缓冲区已经满了,那么还剩余的数据,需要存储起来以便于下次再次写入到我们的内核发送缓冲区,此时我们使用的方式就是在应用层设计一个该connfd对应的发送缓冲区,向其写入未发送完的数据,并且关注connfd的可写事件也就是POLLOUT,以至于下次poll函数调用时候,可以检测到我们内核发送缓冲区可以进行写入,使得我们应用层的发送缓冲区中剩余数据可以被进行处理;
  3. 注意要点:我们队connfd的可写事件检测,一定要在connfd读事件被处理之后,并对响应的数据进行wirte后,才可以关注该connfd的POLLOUT事件,不然的话,connfd的内核发送缓冲区一开始肯定有空间,也就会肯定会触发POLLOUT事件,那么就导致该事件被频繁的触发了;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值