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.pswp.cn/pingmian/88214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88214.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RustFS一款Rust 驅動的 高性能 分布式存儲系統

演示地址&#xff1a;https://play.rustfs.com/browser 訪問賬號&#xff08;默認 rustfsadmin&#xff09;。 訪問密鑰&#xff08;默認 rustfsadmin&#xff09;。 下載mc https://dl.min.io/client/mc/release可以直接在 Linux 系統上安裝 mc&#xff08;&#xff0c;然后訪…

微軟 Bluetooth LE Explorer 實用工具的詳細使用分析

微軟 Bluetooth LE Explorer 實用工具的詳細使用分析 文章目錄 微軟 **Bluetooth LE Explorer** 實用工具的詳細使用分析1. **工具定位與核心功能**2. **關鍵特性與更新**3. **使用場景示例**4. **系統要求與依賴**5. **與專業工具對比**6. **局限性**7. **實踐建議**結論以下是…

centos 7.6安裝mysql8

在 CentOS 7.6 上安裝 MySQL 8.0.42 的步驟如下&#xff0c;基于搜索結果中的最新信息&#xff1a; 下載 MySQL 8.0.42 安裝包 https://dev.mysql.com/downloads/mysql/從 MySQL 官方網站下載 mysql-8.0.42-1.el7.x86_64.rpm-bundle.tar 文件&#xff1a; 官方下載地址&#xf…

CentOS7更換阿里云yum源

問題&#xff1a;剛剛在本地安裝了CentOS7虛擬機&#xff0c;使用yum安裝vim軟件時&#xff08;最小化安裝只有vi沒有vim&#xff09;出現下面的報錯原因 &#xff1a;CentOS7 已于2024-6-30停止維護&#xff0c;官方鏡像源已不可用&#xff0c;可以更換為阿里云鏡像源解決&…

UE5內置插件 AnimToTexture 簡單入門

開啟插件 首先安裝插件&#xff0c;然后重啟。打開顯示插件內容我們就可以找到插件自帶的轉換內容將骨骼網格體轉換為頂點動畫有兩種方式&#xff1a; 最簡單的記錄每個頂點的位置然后通過切換拾取顏色偏移實現記錄骨骼的變換&#xff0c;然后通過貼圖去修改骨骼位置計算 這兩種…

如何搭建Appium環境?

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快1、安裝Java Development Kit&#xff08;JDK&#xff09;前往Oracle官網下載JDK。在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到…

Android kotlin 協程的詳細使用指南

Android Kotlin 協程的詳細使用指南&#xff0c;結合核心概念、實戰場景和最佳實踐&#xff1a;一、協程基礎概念?協程本質?協程是輕量級線程&#xff0c;通過掛起/恢復機制實現并發&#xff0c;相比線程節省90%以上的內存開銷。其核心優勢在于結構化并發和掛起函數的協作式調…

什么是 AMR 格式?簡鹿音頻轉換器輕松批量轉換 AMR 為 MP3

AMR 格式是一種比較特殊但又常見的音頻格式&#xff0c;而MP3 格式則是大家耳熟能詳的通用音頻格式。那么&#xff0c;它們之間有什么區別&#xff1f;又該如何把 AMR 文件轉換成更常用的 MP3 呢&#xff1f;下面我們就來通俗地了解一下。一、什么是 AMR 格式&#xff1f;AMR&a…

C++11 std::move與std::move_backward深度解析

文章目錄移動語義的革命性意義std::move&#xff1a;正向范圍移動函數原型與核心功能關鍵特性與實現原理適用場景與代碼示例危險區域&#xff1a;重疊范圍的未定義行為std::move_backward&#xff1a;反向安全移動函數原型與核心功能關鍵特性與實現原理適用場景與代碼示例重疊范…

訂單初版—2.生單鏈路中的技術問題說明文檔

大綱1.生單鏈路的業務代碼2.生單鏈路中可能會出現數據不一致的問題3.Seata AT模式下的分布式事務的原理4.Seata AT模式下的分布式事務的讀寫隔離原理5.Seata AT模式下的死鎖問題以及超時機制6.Seata AT模式下的讀寫隔離機制的影響7.生單鏈路使用Seata AT模式的具體步驟8.生單鏈…

跨平臺ROS2視覺數據流:服務器運行IsaacSim+Foxglove本地可視化全攻略

任務目標 本教程將完整實現&#xff1a; 在服務器無頭模式下運行IsaacSim&#xff0c;并在本地顯示GUI界面 通過IsaacSim的ROS2 Bridge發布圖像數據 在本地Foxglove中實時可視化服務器端的ROS2數據流 實現步驟 1. 服務器無頭運行IsaacSim 本地GUI顯示 在服務器端執行&am…

【機器學習筆記Ⅰ】 8 多元梯度下降法

多元線性回歸的梯度下降法詳解 多元線性回歸&#xff08;Multiple Linear Regression&#xff09;是多個自變量&#xff08;特征&#xff09;與一個因變量&#xff08;目標&#xff09;之間的線性關系建模&#xff0c;梯度下降法用于優化模型參數&#xff08;權重和偏置&#x…

C++——從結構體到類與對象

C 類與對象詳解&#xff1a;從結構體到面向對象編程C 的面向對象編程&#xff08;OOP&#xff09;核心是 類&#xff08;Class&#xff09; 和 對象&#xff08;Object&#xff09;。類是用戶自定義的數據類型&#xff0c;用于封裝數據&#xff08;屬性&#xff09;和操作數據的…

專題:2025數據資產AI價值化:安全、戰略與應用報告|附400+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42885 在數字經濟加速滲透的今天&#xff0c;數據作為核心生產要素的價值愈發凸顯。上市公司作為經濟高質量發展的微觀主體&#xff0c;其數據價值化進程不僅關乎企業自身競爭力&#xff0c;更折射出中國產業數字化轉型的深度與廣度。…

泛微虛擬視圖-數據虛擬化集成

文章目錄一、核心概念對比二、功能特性對比1. 數據操作能力2. 業務邏輯支持3. 性能表現三、技術實現差異1. 虛擬表單實現原理2. 視圖實現原理四、典型應用場景對比1. 虛擬表單適用場景2. 視圖適用場景五、配置與管理對比六、性能優化差異虛擬表單優化策略視圖優化策略七、企業級…

Ubuntu 下 MySql 使用

1.開發背景開發項目需要使用到數據庫&#xff0c;相對于輕量級的 SQLite&#xff0c;MySql 相對復雜一下&#xff0c;但是可以遠程訪問&#xff0c;還是比較舒服的。2.開發需求Ubuntu 安裝 MySql 服務端&#xff0c;Window 客戶端訪問 Ubuntu 數據庫。3.開發環境Ubuntu20.04 W…

QT開發技術 【qt應用限制只能啟動一個】

限制 Qt 程序只能啟動一個實例 在開發 Qt 應用程序時,可能需要限制程序只能運行一個實例,以避免重復啟動。以下是實現這一功能的幾種常用方法。 使用 QSharedMemory 限制單實例 通過共享內存判斷是否已有程序運行,如果存在則退出當前實例。 #include <QApplication&g…

Android 禁用beam傳輸

1、打開/packages/apps/Nfc/src/com/android/nfc/beam/BeamManager.java找到startBeamReceive、startBeamSend方法public boolean startBeamReceive(Context context,HandoverDataParser.BluetoothHandoverData handoverData) {synchronized (mLock) {if (mBeamInProgress) {re…

基于 ETL 工具實現人大金倉數據庫的數據遷移與整合實操指南

在企業數字化轉型的浪潮下&#xff0c;數據已經成為企業發展的核心資產。人大金倉數據庫憑借其穩定可靠的性能&#xff0c;在國內眾多企業中得到了廣泛應用。但隨著業務的不斷拓展和系統的更新迭代&#xff0c;數據遷移與整合的需求也日益凸顯。無論是將人大金倉數據庫的數據遷…

TCP 事務全面研究:從原理到優化與故障排除

一、引言 TCP&#xff08;傳輸控制協議&#xff09;作為互聯網的核心協議之一&#xff0c;已經在全球范圍內運行了近 50 年。自 1974 年由文頓?瑟夫和羅伯特?卡恩設計以來&#xff0c;TCP 經歷了多次修訂和優化&#xff0c;以適應不斷變化的網絡環境和應用需求。TCP 事務是指…