簡介
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();