18,356
社区成员
发帖
与我相关
我的任务
分享
typedef struct _SIOCPRWContext
{
OVERLAPPED m_overlapped; // 每一个重叠网络操作的重叠结构(针对每一个Socket的每一个操作,都要有一个) 20
EIOCPPostType m_ePostType; // 标识网络操作的类型(对应上面的枚举) 4
SOCKET m_socket; // 网络操作所使用的Socket 4
WSABUF m_wsaBuf; // WSA类型的读缓冲区,用于给重叠操作传参数的 8
DWORD m_nTotalBytes; // 数据总的字节数
DWORD m_nBytes; // 已读取的字节数,初始设置为0
char* m_pBufAddress; // 缓冲区初始地址,在接收buffer调整时保存buffer首址
}*PSIOCPRWContext,SIOCPRWContext;
const ULONG SIOCPRWContextSize = sizeof(SIOCPRWContext);
typedef struct _PER_SOCKET_Context
{
SOCKET m_Socket; //连接客户端的socket
SOCKADDR_IN m_ClientAddr; //客户端地址
} SIOCPSocketContext, *PIOCPSocketContext;
const ULONG SSIOCPSocketContextSize = sizeof(SIOCPSocketContext);
1. IOCP部分不理解业务,通过回调函数按照业务层的要求初始化Buffer.
写投递有一次memcpy动作;读投递兼顾拼包。
2. 上层业务要发送实时数据和历史数据(差别是实时数据业务层处理所需时间短,发送数据量较小,历史数据业务层处理所需时间较长,发送数据较大),目前测试发送实时数据,内存占用正常,进程退出可以完全释放;但发送历史数据时,内存占用会持续上涨,退出时有上述问题。
这种情况是否可以认定IOCP模块没有问题,问题是上层业务代码Bug导致的?
如有未说清楚的,请大牛们指点,我继续补充。