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

使用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.****.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查查看吧