当前位置: 首页 > news >正文

项目模块四:Channel模块

一、模块目的

对描述符监控事件的管理。

二、模块设计

1、成员变量

套接字:int _sockfd

需要关心的事件:uint32_t _events

已经触发的事件:uint32_t _revents

需要设置的回调函数:都回调,写回调,任意事件回调,错误回调,连接关闭回调。

2、成员函数

(1)设置触发事件 void SetRevents(uint32_t revents)

_revents = revents;

(2)获取套接字 void Sockfd()

return _sockfd;

(3)获取需要关心的事件 void Events()

return _events;

(4)读 / 写事件是否就续

return _revents & EPOLLIN;

return _revents & EPOLLOUT;

(5)关心读 / 写事件

_events | EPOLLIN;

_events | EPOLLOUT;

(*)

(6)删除读 / 写事件关心

其实就是把特定比特位由0置1

_events &= (~EPOLLIN);

_events &= (~EPOLLOUT);

(*)

(7)关闭所有事件

_events = 0;

(*)

(8)移除事件监控

暂时无法实现,预计流程:调用 eventloop 模块中的子模块 poller 模块接口实现。(*)

(9)设置回调函数

不由 Channel 模块决定。

预计流程:tcpserver 模块 -> Connection 模块 -> Channel 模块

(10)处理触发事件

有 EPOLLIN, EPOLLPRI(优先带外数据), EPOLLRDHUP(半关闭连接,读端写端一端关闭) 就调用读回调和任意事件回调。

有 EPOLLIOUT 就调用写回调和任意事件回调。

有 EPOLLERR, EPOLLHUP(连接关闭) 就分别调用错误回调和连接关闭回调。注意由于两个都是错误,本质会关闭连接,所以只要有一种情况得到处理即可,用 else if

三、代码展示


http://www.mrgr.cn/news/54559.html

相关文章:

  • Virtuoso Layout无法显示元件,出现pcellEvalFailed错误问题解析
  • OpenSEMBA :一个用于电磁场模拟的开源软件框架
  • Javascript链表模拟
  • 使用Matplotlib绘制极轴散点图
  • 是时候和传统源代码保密方案说拜拜了
  • PyMySQL连接MySQL和StarRocks查询表
  • 世界脑力锦标赛资料,最强大脑教程
  • 同济子豪兄--传统图机器学习的特征工程-节点【斯坦福CS224W】
  • 为图片添加水印(Python)
  • 控制系统 状态观测问题 Kalman卡尔曼(附MATLAB实现)
  • 深入剖析:神经网络的结构与功能解读
  • Monorepo 管理多个包
  • SpringBoot项目整合Knife4J
  • Spark 同步 MySQL 数据到 Hive:技术实践与代码示例
  • Python内存管理入门:理解和优化你的代码
  • 【智能算法应用】徒步优化算法求解二维路径规划问题
  • Nature 正刊丨群体爆发中的神经元序列在人类皮层中编码信息
  • 房子,它或许是沃土
  • STM32传感器模块编程实践(七) MLX90614红外测温模块简介及驱动源码
  • Atlas800昇腾服务器(型号:3000)—CANN安装(二)
  • 【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅
  • 从零开始学PHP之输出语句变量常量
  • 加减乘除计算指令整理
  • uniapp+vue3+uview-plus修改默认样式
  • d3dcompiler_43.dll丢失怎么修复?分享5种实用方法助轻松搞定
  • 有口才的从业者一定是位人才