日期:2014-05-16  浏览次数:20693 次

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;
}


------解决方案--------------------
顶..