使用socket连接服务器的内存泄露有关问题,有代码
使用socket连接服务器的内存泄露问题,有代码
以下代码可在vs2008下编译通过,其中61.135.169.125为百度网站的IP地址,作为测试用。程序产生的问题在于,当用任务管理器查看程序耗占的内存时,发现耗占内存以8K,12k或者更大的数值持续增加。不知道是哪里有问题。请大家提出看法,谢谢~~~~
http://topic.****.net/u/20120804/01/fb5259bf-f15c-4062-a7fe-3ef52d0d6305.html?73283
------解决方案--------------------
先还得初始化套接字库:
以下代码可在vs2008下编译通过,其中61.135.169.125为百度网站的IP地址,作为测试用。程序产生的问题在于,当用任务管理器查看程序耗占的内存时,发现耗占内存以8K,12k或者更大的数值持续增加。不知道是哪里有问题。请大家提出看法,谢谢~~~~
- C/C++ code
#include <iostream> #include <Windows.h> #include <WinSock2.h> int main(int, char**) { while (true) { SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); sockaddr_in addr; memset(&addr, 0, sizeof(sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr("61.135.169.125"); addr.sin_port = htons(80); if (connect(s, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR) { std::cout << "connect error" << std::endl; } shutdown(s, SD_SEND); closesocket(s); } return 0; }
http://topic.****.net/u/20120804/01/fb5259bf-f15c-4062-a7fe-3ef52d0d6305.html?73283
------解决方案--------------------
先还得初始化套接字库:
- C/C++ code
//================================================================= #include <WinSock2.h> #include <Windows.h> #include <iostream.h> #pragma comment(lib,"ws2_32.lib") void InitSocket() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) { WSACleanup( ); return; } } void main(int, char**) { InitSocket(); while (true) { SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_IP); sockaddr_in addr; memset(&addr, 0, sizeof(sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.S_un.S_addr = inet_addr("61.135.169.125"); addr.sin_port = htons(80); if (connect(s, (SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR) { cout << "connect error" <<endl; } shutdown(s, SD_SEND); closesocket(s); } WSACleanup( ); return ; }
------解决方案--------------------
倒不是很占内存,也没有持续增长,只是你的一个while循环,太耗CPU。。。
------解决方案--------------------
貌似closesocket只是说那个套接字不可以用了,它实际占用的资源需要一定的时间才能释放掉的。
你可以用防火墙看看,每次申请到的socket套接字会不断上涨,然后过一段时间又会从很小的数值开始上涨。
因为你刚刚关掉的套接字,必须要等一段时间才能释放掉所有的资源。
------解决方案--------------------
你写的死循环啊,Debug吧,内存增长很正常,只要不一直增下去即可,connect完一次Sleep(1000)试试还会不会不断增
------解决方案--------------------
测试1小时-2小时,以前我写的代码,开3天都内存都没增长过。
实在不行用CheckBounds查查看吧