poll–函数在服务端流程图
- 当我们的已连接套接字时间就绪,也就是connfd已连接套接字读事件就绪时候,那么我们就要读取接受缓冲区的数据,但是我们不能保证我们一次读取就能够读完,所以我们需要循环读取,那么就需要在应用层设置一个该connfd对应的接受缓冲区;然后应用层再从接受缓冲区读取数据进行业务逻辑处理;
-
当我们处理完毕connfd已连接套接字的读事件之后,需要响应数据(该数据就是对读到的数据进行处理过后的数据)给客户端(先调用write函数写入内核的发送缓冲区,再由内核TCP层进行将发送缓冲区数据发给客户端),此时,我们不能保证我们响应回去的数据能够通过一次wirte函数就进行写完到内核发送缓冲区,因为有可能我们只写了一定的字节数而没有写完,也有可能我们的内核发送缓冲区已经满了,那么还剩余的数据,需要存储起来以便于下次再次写入到我们的内核发送缓冲区,此时我们使用的方式就是在应用层设计一个该connfd对应的发送缓冲区,向其写入未发送完的数据,并且关注connfd的可写事件也就是POLLOUT,以至于下次poll函数调用时候,可以检测到我们内核发送缓冲区可以进行写入,使得我们应用层的发送缓冲区中剩余数据可以被进行处理;
- 注意要点:我们队connfd的可写事件检测,一定要在connfd读事件被处理之后,并对响应的数据进行wirte后,才可以关注该connfd的POLLOUT事件,不然的话,connfd的内核发送缓冲区一开始肯定有空间,也就会肯定会触发POLLOUT事件,那么就导致该事件被频繁的触发了;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)