hiredis window之RFDMap
简介
RFDMap用于将socket分配映射成连续的文件描述符,同时管理回收的文件描述符,因为ae构架中管理fd与对应事件处理器使用的是数据,fd作为数组下标
结构
其中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();