• TCP客户端频繁连接退出,服务端避免内存的重复开辟


    防止内存的重复开辟:Free 而不 Destory

    参数说明:

    lpFreeSocketList:服务端数据结构中保存的退出的客户对象链表头

    lpSocketListCs:临界区指针

    s:SOCKET对象

    LPSOCKET_OBJ GetSocketObj(LPSOCKET_OBJ * lpFreeSocketList, CRITICAL_SECTION * lpSocketListCs, SOCKET s)
    {
    LPSOCKET_OBJ lpSockObj = NULL;

    EnterCriticalSection(lpSocketListCs);
    if(*lpFreeSocketList)
    {
    lpSockObj = *lpFreeSocketList;
    *lpFreeSocketList = lpSockObj->lpNext;
    lpSockObj->lpNext = NULL;
    }
    else
    {
    lpSockObj = (LPSOCKET_OBJ)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(SOCKET_OBJ));
    if(lpSockObj != NULL)
    {
    InitializeCriticalSection(&lpSockObj->SockCritSec);
    }
    }
    LeaveCriticalSection(lpSocketListCs);
    // Initialize the members
    if(lpSockObj)
    {
    lpSockObj->s = s;
    lpSockObj->lpUserData = NULL;
    lpSockObj->lClosingStatus = 0;
    memset(lpSockObj->szPeerAddr, 0, sizeof(lpSockObj->szPeerAddr));
    }
    return lpSockObj;
    }

  • 相关阅读:
    Vue 函数
    VUE 基础语法
    C# txt文件操作
    C# 添加应用程序包
    Js 倒计时跳转
    Redis集群(主从集群)(一)
    JAVA基础总结001(《JAVA核心技术》)
    Linux学习001——文件和用户
    Linux——ELK集群搭建
    Linux安装jdk
  • 原文地址:https://www.cnblogs.com/lp-blogs/p/3998362.html
Copyright © 2020-2023  润新知