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

hiredis window之RFDMap

简介

RFDMap用于将socket分配映射成连续的文件描述符,同时管理回收的文件描述符,因为ae构架中管理fd与对应事件处理器使用的是数据,fd作为数组下标

结构

RFDMap
- map<SOCKET, RFD> SocketToRFDMap
- map<int, RFD> CrtFDToRFDMap
- map<RFD, SocketInfo> RFDToSocketInfoMap
- map<RFD, int> RFDToCrtFDMap
- queue<RFD> RFDRecyclePool
+RFD addSocket(SOCKET socket)
+void removeSocketToRFD(SOCKET socket)
+void removeRFDToSocketInfo(RFD rfd)
+RFD addCrtFD(int crt_fd)
+void removeCrtFD(int crt_fd)
+SOCKET lookupSocket(RFD rfd)
+SocketInfo* lookupSocketInfo(RFD rfd)
+int lookupCrtFD(RFD rfd)
SocketInfo
+ SOCKET socket
+ void* state
+ int flags
+ SOCKADDR_STORAGE socketAddrStorage
iocpSockState
+ int masks
+ int fd
+ aacceptreq *reqs
+ int wreqs
+ OVERLAPPED ov_read
+ list wreqlist
+ int unknownComplete

其中state为iocpSockState
ov_read:iocp中处理连接 的

接口转换

与原生socket相关的接口转成与rfd操作的。其是通过Win32_FDSockMap`来转换的

class Win32_FDSockMap {
public:static Win32_FDSockMap& getInstance() {static Win32_FDSockMap instance; // Instantiated on first use. Guaranteed to be destroyed.return instance;}private:Win32_FDSockMap() {InitWinsock();accept = FDAPI_accept;access = FDAPI_access;bind = FDAPI_bind;connect = FDAPI_connect;fcntl = FDAPI_fcntl;freeaddrinfo = FDAPI_freeaddrinfo;fsync = FDAPI_fsync;ftruncate = FDAPI_ftruncate;getaddrinfo = FDAPI_getaddrinfo;getsockopt = FDAPI_getsockopt;getpeername = FDAPI_getpeername;getsockname = FDAPI_getsockname;htonl = FDAPI_htonl;htons = FDAPI_htons;inet_ntop = FDAPI_inet_ntop;inet_pton = FDAPI_inet_pton;isatty = FDAPI_isatty;listen = FDAPI_listen;lseek64 = FDAPI_lseek64;ntohl = FDAPI_ntohl;ntohs = FDAPI_ntohs;open = FDAPI_open;pipe = FDAPI_pipe;poll = FDAPI_poll;read = FDAPI_read;select = FDAPI_select;setsockopt = FDAPI_setsockopt;socket = FDAPI_socket;write = FDAPI_write;}~Win32_FDSockMap() {CleanupWinsock();}Win32_FDSockMap(Win32_FDSockMap const&);    // Don't implement to guarantee singleton semanticsvoid operator=(Win32_FDSockMap const&);     // Don't implement to guarantee singleton semantics
};

通过全局单例完成 Win32_FDSockMap 的初始化

static class Win32_FDSockMap& init = Win32_FDSockMap::getInstance();
http://www.dtcms.com/a/267666.html

相关文章:

  • 基于大模型的肾积水全周期预测与诊疗方案研究报告
  • 如何使用backtrace定位Linux程序的崩溃位置
  • 【STM32】定时器中断 + 含常用寄存器和库函数配置(提供完整实例代码)
  • 洛谷 P11967 [GESP202503 八级] 割裂-普及+/提高
  • 百度文心 4.5 大模型详解:ERNIE 4.5 Technical Report
  • 水下航行器外形之变体式与回转体的区别
  • 线程锁和线程同步
  • 从“电话催维修“到“手机看进度“——售后服务系统开发如何重构客户体验
  • Linux网络配置与故障排除完全指南
  • 12 nacos配置中心
  • 使用Kahn算法处理节点依赖关系
  • ABB焊接机器人智能节气仪
  • 汽车制造车间检测机器人与PLC无线以太网实时控制方案
  • 数据库学习笔记(十七)--触发器的使用
  • Java SE--数组
  • 前端相关性能优化笔记
  • TEXT Complete Search
  • 【RK3568 编译rtl8723DU驱动】
  • Write-up:hacker_dns
  • 安达发|告别低效排产:APS高级排程如何助力电池企业智造升级?
  • Java 大视界 -- 基于 Java 的大数据实时流处理在工业物联网设备能耗实时监测与节能优化中的应用(332)
  • 09_云原生架构:拥抱不确定性
  • 【力扣 简单 C】746. 使用最小花费爬楼梯
  • AI小智项目全解析:软硬件架构与开发环境配置
  • 自动化Prompt生成平台的研发体系设计
  • [HDLBits] Cs450/history shift
  • vue router 里push方法重写为什么要重绑定this
  • Xmind功能特点
  • LucidShape 2024.09 最新
  • 2025年3月青少年电子学会等级考试 中小学生python编程等级考试三级真题答案解析(判断题)