博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于链表的创建 代码

Posted on 2009-04-22 15:54  浪端之渡鸟  阅读(685)  评论(5)    收藏  举报
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);
}