|
3驿站币
IOCP:
一:投递
cnewuinfo=(CUserInfo*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(sizeof(CUserInfo)));
comsokhle=CreateIoCompletionPort((HANDLE)cClientSKT,m_hCompletionPort,(ULONG_PTR)cnewuinfo,0);
bRet = m_wsaapi.AcceptEx(cListSKT,cClientSKT,m_pOverLap->m_szBuf,0,sizeof(sockaddr_in)+16,sizeof(sockaddr_in)+16,&dwBytesRecv,&m_pOverLap->m_OLap);
二:接收(此处的cuinfo值有问题)
CUserInfo *cuinfo=NULL,
while (TRUE)
{
bIORet = GetQueuedCompletionStatus(pThis->m_hCompletionPort, &dwTrans, (PULONG_PTR)&cuinfo, (LPOVERLAPPED *)&pOverLaps, INFINITE);
if (!bIORet)
{//此是检查到SOCKET断开了 注意,此处可能是线程池结束该线程,造成cuinfo值为野指针
if(cuinfo!=NULL)
{
。。。。。。。。。。。。。。。。。。。
IOCP可能开几天都没天,但偶尔就会遇到 bIORet =false时,cuinfo为野指针,pOverLaps的值是正常的,
当bIORet =false时,我要回断开socket回收:cuinfo,pOverLaps,
pOverLaps的值正常,回收没问题,但cuinfo偶尔是野指针,求指点,为什么会这样 |
上一篇: 关于SendMessageTimeout 未通知到其它进程的问题下一篇: 求大神指点读取XML文件
|