TinyWebserver中定时器的具体运行工作过程
文章主要内容
在阅读TinyWebserver源码过程中,对于定时器部分具体运行工作过程进行了梳理。需要结合源码观看本篇文章,希望对阅读定时器部分却思路很混乱的同学以帮助。
定时器节点类和定时器链表类
节点类和链表类的具体结构和作用
具体执行过程
(1) 首先使用socketpair创建管道。
(2) 设置写端为非阻塞,是为了减少信号处理的时间,即使定时事件失效也没关系,并不严格。
(3) 设置读端为ET非阻塞,向epoll树上挂读管道事件。
(4) 执行信号函数addsig,把信号添加到信号集当中,并把信号默认处理方式改成sig_handler函数(函数内容是向管道写入信号值)
(5) 设置bool值timeout和stop_server,后面需要使用他们判断是否执行信号对应的处理逻辑。
(6) 开始alarm函数,设定时间。
(7) 监听文件描述符epoll_wait。
(8) 监听到以后读出信号。
(9) 执行处理逻辑,如果信号是SIGALRM,timeout=true;如果是SIGTERM(ctrl+c)stop_server=true;
(10&#x