首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

使用socket连接服务器的内存泄露有关问题,有代码

2012-09-03 
使用socket连接服务器的内存泄露问题,有代码以下代码可在vs2008下编译通过,其中61.135.169.125为百度网站

使用socket连接服务器的内存泄露问题,有代码
以下代码可在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;}
另外同样的问题,但是是boost库中使用asio的,请参见
http://topic.csdn.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查查看吧

热点排行