struct SocketObj
{
SOCKET socket; //当前对象的socket
BOOL listening; //该套接字是否已经
SocketObj *next, //向后
*prev; //向前
};
SocketObj *g_pSocketList = NULL; //Socket连表
SocketObj *g_pSocketEnd = NULL; //连表的尾部
int g_nSocketCount = 0;
HANDLE g_hSelect;
//创建SocketObj
SocketObj* GetSocketObj(SOCKET s,BOOL listening)
{
SocketObj *newSocketObj = NULL;
newSocketObj = (SocketObj*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SocketObj));
if(newSocketObj == NULL)
{
cout<<"GetSocketObj: HeapAlloc failed: "<< GetLastError()<<endl;
ExitProcess(-1); //结束进程
}
newSocketObj->socket = s;
newSocketObj->listening = listening;
return newSocketObj;
}
//插入一个SocketObj
void InserSocketObj(SocketObj *obj)
{
obj->next = obj->prev = NULL;
if(g_pSocketList == NULL)
{
g_pSocketList = g_pSocketEnd = obj;
}
else
{
obj->prev = g_pSocketEnd;
g_pSocketEnd->next = obj;
g_pSocketEnd = obj;
}
g_nSocketCount++;
}
//删除
void RemoveSocketObj(SocketObj *obj)
{
if(obj->prev)
{
obj->prev->next = obj->next;
}
if(obj->next)
{
obj->next->prev = obj->prev;
}
if(obj == g_pSocketList)
{
g_pSocketList = obj->next;
}
if(obj == g_pSocketEnd)
{
g_pSocketEnd = obj->prev;
}
g_nSocketCount--;
HeapFree(GetProcessHeap(),0,obj);
}
{
SOCKET socket; //当前对象的socket
BOOL listening; //该套接字是否已经
SocketObj *next, //向后
*prev; //向前
};
SocketObj *g_pSocketList = NULL; //Socket连表
SocketObj *g_pSocketEnd = NULL; //连表的尾部
int g_nSocketCount = 0;
HANDLE g_hSelect;
//创建SocketObj
SocketObj* GetSocketObj(SOCKET s,BOOL listening)
{
SocketObj *newSocketObj = NULL;
newSocketObj = (SocketObj*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(SocketObj));
if(newSocketObj == NULL)
{
cout<<"GetSocketObj: HeapAlloc failed: "<< GetLastError()<<endl;
ExitProcess(-1); //结束进程
}
newSocketObj->socket = s;
newSocketObj->listening = listening;
return newSocketObj;
}
//插入一个SocketObj
void InserSocketObj(SocketObj *obj)
{
obj->next = obj->prev = NULL;
if(g_pSocketList == NULL)
{
g_pSocketList = g_pSocketEnd = obj;
}
else
{
obj->prev = g_pSocketEnd;
g_pSocketEnd->next = obj;
g_pSocketEnd = obj;
}
g_nSocketCount++;
}
//删除
void RemoveSocketObj(SocketObj *obj)
{
if(obj->prev)
{
obj->prev->next = obj->next;
}
if(obj->next)
{
obj->next->prev = obj->prev;
}
if(obj == g_pSocketList)
{
g_pSocketList = obj->next;
}
if(obj == g_pSocketEnd)
{
g_pSocketEnd = obj->prev;
}
g_nSocketCount--;
HeapFree(GetProcessHeap(),0,obj);
}