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;
}

时间: 2024-11-06 03:28:42

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

Unity使用C#实现简单Scoket连接及服务端与客户端通讯

简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [csharp] view plain copyThread connectThread;//当前服务端监听子线程 public string address;//当前地址 public int port;//当前本地端口 TcpClient romoteClient;//远程客户端 // Use t

PHP的socket连接到服务端模版

在整理新框架的时候,发现对于一些缓存数据,需要对外的接口访问,而比较方便的是php的接口,所以临时研究了下php如何连接java服务端. 先贴上代码: <?php require_once 'CRC16.php'; /*----------------------------- | 向服务器发送数据包 ------------------------------*/ classServer{ //发送数据包 publicstaticfunction sendPacket($packet, $ho

客户端技术:Cookie 服务端技术:HttpSession

客户端技术:Cookie 服务端技术:HttpSession 07. 五 / android基础 / 没有评论 一.会话技术1.什么是会话:客户打开浏览器访问一个网站,访问完毕之后,关闭浏览器.这个过程称之为一个会话.就如同打电话.2.会话在编程中主要解决的问题是:保存各个用户的数据信息.3.保存用户各自数据的主要技术:客户端技术:Cookie服务端技术:HttpSession 二.Cookie1.获取Cookie采用request.getCookies()2.设置Cookie采用respons

微信开发SDK|微信sdk使用教程--手机客户端微信下线通知服务端

微信开发SDK|微信sdk使用教程--手机客户端微信下线通知服务端 case WeChatOfflineNotice: {// 手机客户端微信下线通知 log.debug("socket:msgtype=WeChatOfflineNotice"); weChatOfflineNoticeHandler.handleMsg(ctx, msgVo); break; } package com.jubotech.framework.netty.handler.socket; import o

ignite客户端找不到服务端的时候如何设置退出

ignite启动客户端时需要有服务端支持: Ignition.setClientMode(true); Ignition.start("ignite.xml"); 这里有个问题,当启动客户端,客户端发现找不到服务端时会默认每隔两秒重新扫描连接,重试十分钟左右.但是我们希望他找不到服务端的时候立即退出不执行程序,查看源码发现,其扫描与joinTimeout参数有关,客户端启动时对参数进行判断,如果值为空则进行默认重连,但是有值的时候就会按照值的大小进行扫描,为了立即退出,我设置joinT

ssh配置客户端免密钥到服务端

所有操作在client端就ok了. 大致思路如下:在client端,生成公私钥匙对,将公钥上传到服务器上指定的用户(比如说A)的~/.ssh/下 修改下文件,目录权限就ok了,这样你就能能从client向服务端免密钥了, 如果你还想服务端,向客户端免密钥,反过来,就可以了. 譬如,客户端client想免密钥到服务器端的用户A client ip:192.168.200.157 server ip:192.168.200.156 1.ssh-keygen //生成公钥和私钥,一路按回车键就好了 生

iOS推送小结(证书的生成、客户端的开发、服务端的开发)

1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请.若注册成功,回调函数application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 会被触发,App可以得到deviceToken,该to

Android 客户端Socket 与 Java服务端ServerSocket 简单小例子

新建一个Java项目 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public

cmd窗口连接mongodb服务端

1----->配置环境变量,将mongodb\bin目录配置到path 2----->打开cmd窗口,进入到bin目录,测试mongodb服务端是否在运行:net start mongodb 3----->命令行输入mongo (客户端连接服务器) 出现以下窗口即连接成功: