?? lsock.cpp
字號:
// LSock.cpp: implementation of the CLSock class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "datasvr.h"
#include "LSock.h"
#include "rwsock.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CLSock::CLSock()
{
}
CLSock::~CLSock()
{
}
CRWSock sockbuf[100];
bool sockbufstate[100];
void initsockbuf()
{
for(int i=0;i<100;i++)
sockbufstate[i]=false;
}
CRWSock * getsockbuf()
{
for(int i=0;i<100;i++)
if(sockbufstate[i]==false)
break;
if (i<100)
{
sockbufstate[i]=true;
return &sockbuf[i];
}
else return NULL;
}
void freesockbuf(CRWSock * psock)
{
int pos=(psock-&sockbuf[0])/sizeof(CRWSock);
sockbufstate[pos]=false;
sockbuf[pos].Close();
}
void CLSock::OnAccept(int nErrorCode)
{
CRWSock *rwSock;
rwSock=getsockbuf();
if(Accept(*rwSock))
{
m_RWSocks.AddTail(rwSock);
}
else
{
freesockbuf(rwSock);
// delete rwSock;
}
CSocket::OnAccept(nErrorCode);
/* CRWSock *rwSock;
rwSock=new CRWSock;
if(Accept(*rwSock))
{
m_RWSocks.AddTail(rwSock);
}
else
{
delete rwSock;
// AfxMessageBox("Accept() fail");
}
CSocket::OnAccept(nErrorCode);
*/
}
void CLSock::CloseSocket(CRWSock *pSocket)
{
pSocket->Close();
POSITION pos;
pos=m_RWSocks.Find(pSocket);
m_RWSocks.RemoveAt(pos);
if(pSocket!=NULL)
{
freesockbuf(pSocket);
// delete pSocket;
}
/*
pSocket->Close();
POSITION pos;
pos=m_RWSocks.Find(pSocket);
m_RWSocks.RemoveAt(pos);
if(pSocket!=NULL)
{
delete pSocket;
}
*/
}
void CLSock::CloseAllSockets()
{
POSITION pos;
CRWSock *rwSock;
pos=m_RWSocks.GetHeadPosition();
while(pos!=NULL)
{
// _DATA dat;
rwSock=(CRWSock*)m_RWSocks.GetNext(pos);
// rwSock->Send(&dat,sizeof(dat));
CloseSocket(rwSock);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -