我在头文件里SOCKET s;怎么不行呢?
我的程序现在这样
while (1)
{
//如果用户发出请求,应建立连接,同时阻塞等待客户的连接 SOCKET s=accept(m_hSocket,NULL,NULL);  //***********
if(s==SOCKET_ERROR){
TRACE(_T("Accept Error:%d\n"),(error=WSAGetLastError()));
        //closesocket(m_hSocket);
    //return ;
continue;
}
else 
{;//AfxMessageBox(_T("ACCEPT"));

}程序运行的时候,先和电脑建立连接,然后对方给我发命令,执行过后(发一串数据过去)就返回while开始端,等待下次连接,每个五秒钟通断一次,结果发现内存被一点一点吃掉,直到八个小时后死机。如果把五秒钟变成一秒钟,内存就更快的被吃掉,就更快的死机了,大家帮忙分析一下我的程序到底怎么了亚。。

解决方案 »

  1.   

    你在循环里多次执行了SOCKET s =accept(m_hSocket,NULL,NULL);  
    相当于在这个函数的栈里分配了很多SOCKET s,不出这个函数(while所在的函数)是释放不掉的。
    所以你应该把SOCKET s 放在这个函数的外面,那句话改成s =accept(m_hSocket,NULL,NULL);  
    SOCKET s 不能放在H文件里,是你编程的问题,如果无法解决可以放在函数所在的C/CPP文件的开头。
      

  2.   

    a 好人,能不能把你的联系方式告诉我?你的qq能告诉我吗
    我的43409443
      

  3.   

    SOCKET s…… // 这里有问题每一个循环会重新生成一个Socket,这样最终会导致内存耗尽。把Socket定义到循环外面就可以了。
      

  4.   

    最简单的方法就是把m_hSocket设置为阻塞方式,就不会不断的执行这行代码了:)unsigned long ul1= 0 ;
    ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul1);
      

  5.   

    不要把SOCKET s放到循环里面,放到外面
      

  6.   

    我在while的结束端加了closesocket(s);应该也可以吧,因为我把SOCKET S;放在外面总是编译通不过
      

  7.   

    天啊,我回来单位后作了进一步的测试,把程序最简——只剩下网络连接,而且什么不做数据发送,发现每连接一次还是会占用内存,说明我用了closesocket(s);也不管用的阿,怎么办呢??到底是什么原因我的内存在一点点减少???
      

  8.   

    能告诉我怎么放吗?
    还有,上面PiggyXP说最简单的方法就是把m_hSocket设置为阻塞方式,就不会不断的执行这行代码了:)unsigned long ul1= 0 ;
    ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul1);这个是什么意思啊
      

  9.   

    SOCKET S;这句到底应该放在哪里啊?头文件和.CPP的文件头部编译都是通不过的阿大虾们帮帮忙哦
      

  10.   

    怪事情!!我在银川的时候曾经尝试过SOCKET s;放在.cpp文件的头部就是编译不通过,可我刚才试过又行了???? 怎么回事嘛