首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

epoll有关问题

2012-03-23 
epoll问题请教 如何将这个函数 分开放到 EPOLL 读和写两个事件中bool CMyEventServer::UnPackData(int cli

epoll问题
请教 如何将这个函数 分开放到 EPOLL 读和写两个事件中
bool CMyEventServer::UnPackData(int clientindex)
{

printf("开始解析西医保\r\n");
if(clientindex<0)
return false;
  char ins[55]={0};
sprintf(ins,"---!!%d\r\n",clientindex);
printf(ins);
int readdata=0;
readdata=recv(PropData[clientindex].s,
&PropData[clientindex].data[PropData[clientindex].datalength],
65536,0);
if(readdata<0)
{
printf("数据包小于0");
PropData[clientindex].datalength=0;
memset(&PropData[clientindex].data,0,sizeof(PropData[clientindex].data));
return false;
}

PropData[clientindex].datalength+=readdata;

PACKHEAD m_head;
memset(&m_head,0,sizeof(PACKHEAD));
memcpy(&m_head,&PropData[clientindex].data,sizeof(PACKHEAD));

if(m_head.IMPORTCODE!=MYCODE)
{
PropData[clientindex].datalength=0;
memset(&PropData[clientindex].data,0,sizeof(PropData[clientindex].data));
return false;
}
if((m_head.PACKSIZE+sizeof(PACKHEAD)) > PropData[clientindex].datalength)
{
return false;
}
else
{
if((m_head.PACKSIZE+sizeof(PACKHEAD)) == PropData[clientindex].datalength)
{
OnLogicMessage(clientindex,(LogicData *)&PropData[clientindex].data[sizeof(PACKHEAD)]);//send函数
PropData[clientindex].datalength=0;
memset(&PropData[clientindex].data,0,sizeof(PropData[clientindex].data));
return true;
}
else
{
unsigned int haveunpack=0;
while(1)
{
memset(&m_head,0,sizeof(PACKHEAD));
memcpy(&m_head,&PropData[clientindex].data[haveunpack],sizeof(PACKHEAD));

if(m_head.IMPORTCODE!=MYCODE)
{
PropData[clientindex].datalength=0;
memset(&PropData[clientindex].data,0,sizeof(PropData[clientindex].data));
break;
}

if((sizeof(PACKHEAD)+m_head.PACKSIZE) > PropData[clientindex].datalength-haveunpack)
{
memset(&tmpbuff,0,sizeof(tmpbuff));
memcpy(&tmpbuff,&PropData[clientindex].data[haveunpack],PropData[clientindex].datalength-haveunpack);
PropData[clientindex].datalength=PropData[clientindex].datalength-haveunpack;
memset(&PropData[clientindex].data,0,sizeof(PropData[clientindex].data));
memcpy(&PropData[clientindex].data,&tmpbuff,PropData[clientindex].datalength);
break;
}
OnLogicMessage(clientindex,(LogicData *)&PropData[clientindex].data[haveunpack+sizeof(PACKHEAD)]);//send函数

haveunpack+=(m_head.PACKSIZE+sizeof(PACKHEAD));
}
}
}
return true;
}


[解决办法]
顶..

热点排行