pThis->m_wsaEvent[pThis->m_nEventCount] = WSACreateEvent();
pThis->m_wsaOverlapped[pThis->m_nOverlappedCount].hEvent = pThis->m_wsaEvent[pThis->m_nEventCount];
pThis->m_nEventCount ++;
pThis->m_nOverlappedCount ++; stMessage message;
WSABUF buffer;
buffer.buf = (char*)&message;
buffer.len = MAX_BUFFER;
DWORD dwBytesOfRecved = 0;
DWORD dwFlags = 0;
int nRet = 0;
int nAddrLen = sizeof(SOCKADDR);
SOCKADDR_IN addrFrom;
nRet = WSARecvFrom(acceptNew , &buffer , BUF_COUNT , &dwBytesOfRecved , &dwFlags , (SOCKADDR*)&addrFrom, &nAddrLen,
&(pThis->m_wsaOverlapped[pThis->m_nOverlappedCount - 1]) ,NULL); //接受数据,会立即返回,因为是异步的 if(SOCKET_ERROR == nRet)
{
if(WSAGetLastError() != WSA_IO_PENDING)
{
closesocket(acceptNew);
return 0;
}
} DWORD  dwWaitResult = 0;
DWORD dwBytesOfTransfer = 0;
while(1)
{
dwWaitResult = WSAWaitForMultipleEvents(pThis->m_nOverlappedCount , pThis->m_wsaEvent ,TIMEWAIT ,FALSE , FALSE);//当有事件处于有信号状态的时候就返回
WSAResetEvent(pThis->m_wsaEvent[dwWaitResult - WSA_WAIT_EVENT_0]);//重置事件状态
WSAGetOverlappedResult(acceptNew , &(pThis->m_wsaOverlapped[dwWaitResult - WSA_WAIT_EVENT_0]) ,
&dwBytesOfTransfer ,FALSE , &dwFlags);//获取IO处理结果 if(dwBytesOfTransfer == 0)
{
closesocket(acceptNew);
WSACloseEvent(pThis->m_wsaEvent[dwWaitResult - WSA_WAIT_EVENT_0]);
return 0;
}
//保存登陆用户信息并分析数据报
pThis->ParseRecvData(&buffer , &addrFrom); memset(&(pThis->m_wsaOverlapped[dwWaitResult - WSA_WAIT_EVENT_0]) , 0 ,sizeof(WSAOVERLAPPED));
pThis->m_wsaOverlapped[dwWaitResult - WSA_WAIT_EVENT_0].hEvent = pThis->m_wsaEvent[dwWaitResult - WSA_WAIT_EVENT_0];
memset(&message , 0 , sizeof(message));
buffer.buf = (char*)&message;
buffer.len = sizeof(message);
WSARecvFrom(acceptNew , &buffer , BUF_COUNT , &dwBytesOfRecved , &dwFlags ,(SOCKADDR*)&addrFrom, &nAddrLen ,
&(pThis->m_wsaOverlapped[dwWaitResult - WSA_WAIT_EVENT_0]) , NULL);
}调试的时候发现dwWaitResult 的值为258!!!!
这是怎么回事,实际上我的数组大小只有1,怎么回事???
望高手指点!!!!!