我在头文件里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开始端,等待下次连接,每个五秒钟通断一次,结果发现内存被一点一点吃掉,直到八个小时后死机。如果把五秒钟变成一秒钟,内存就更快的被吃掉,就更快的死机了,大家帮忙分析一下我的程序到底怎么了亚。。
我的程序现在这样
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开始端,等待下次连接,每个五秒钟通断一次,结果发现内存被一点一点吃掉,直到八个小时后死机。如果把五秒钟变成一秒钟,内存就更快的被吃掉,就更快的死机了,大家帮忙分析一下我的程序到底怎么了亚。。
相当于在这个函数的栈里分配了很多SOCKET s,不出这个函数(while所在的函数)是释放不掉的。
所以你应该把SOCKET s 放在这个函数的外面,那句话改成s =accept(m_hSocket,NULL,NULL);
SOCKET s 不能放在H文件里,是你编程的问题,如果无法解决可以放在函数所在的C/CPP文件的开头。
我的43409443
ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul1);
还有,上面PiggyXP说最简单的方法就是把m_hSocket设置为阻塞方式,就不会不断的执行这行代码了:)unsigned long ul1= 0 ;
ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul1);这个是什么意思啊