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,怎么回事???
望高手指点!!!!!
解决方案 »
- unresolved external symbol "long __stdcall WindowProc(struct HWND__ *,unsigned i
- 怎样得到动态创建控件 的句柄??
- 一个24位图像转灰度图的问题
- 哪里有开发用于嵌入网页的activex的教程?
- 代理服务器,处理连接超时的问题....
- 提供一个下载MSDN2003的地方!帮忙顶啊!
- 快速获取文件类型的相关显示图标?
- 帮忙看看错误在哪
- vc编译出现error LNK2005,按照微软网站上148652(原CHS148652)介绍的方法还是解决不了。
- SDK中可以分割窗口马
- VC修改SQL数据库 ADO
- 窗口能不能收到postmessage的消息
不过想问下,如果我设置了超时间隔,我怎么样处理由于超时返回呢???
望高人指点!