udp服务器使用重叠模型WSARecvfrom在调用大约800多次后出现10055(缓冲不足)错误,如何解决?

39 views
Skip to first unread message

duo li

unread,
Aug 29, 2008, 11:44:15 AM8/29/08
to dev4s...@googlegroups.com
udp服务器使用重叠模型WSARecvfrom在调用大约800多次后出现10055(缓冲不足)错误,如何解决?
之间几乎没做任何事情
大概的代码
DWORD WINAPI RecvThreadFunc(LPVOID lpParam)
{
 VLServerBase* vlserv = (VLServerBase*) lpParam;
 SOCKADDR_IN clientAddr_in;
 int iaddrlength = sizeof(SOCKADDR_IN);
  
 int iRet;
 char buffer[DATA_BUFSIZE];
 ZeroMemory(buffer,DATA_BUFSIZE);
 //先初始化一个event
 WSAEVENT hEvent = WSACreateEvent();
 vlserv->m_iSockIndex = vlserv->GetInvidEventIndex();
 vlserv->EventArray[vlserv->m_iSockIndex] = hEvent;
 
 ZeroMemory(&(vlserv->AcceptOverlapped[vlserv->m_iSockIndex]), sizeof(WSAOVERLAPPED));
 vlserv->AcceptOverlapped[vlserv->m_iSockIndex].hEvent = vlserv->EventArray[vlserv->m_iSockIndex];
 vlserv->DataBuf[vlserv->m_iSockIndex].len = DATA_BUFSIZE;
 vlserv->DataBuf[vlserv->m_iSockIndex].buf = buffer;
 vlserv->m_dwFlag = 0;
 
 for(int i = 0;;i++)
 {
  if(vlserv->m_iEventTotal >= WSA_MAXIMUM_WAIT_EVENTS) 
  {
   continue;
  }
  
  iRet = WSARecvFrom(
     vlserv->m_servSock, // Socket
     &(vlserv->DataBuf[vlserv->m_iSockIndex]),   // WSABUF
     1,    // Number of buffers
     &(vlserv->m_dwRevbBytes),   // Bytes received
     &(vlserv->m_dwFlag),  // Flags
     (sockaddr* )&clientAddr_in, //(vlserv->m_clientAddr),
     &iaddrlength,
     &(vlserv->AcceptOverlapped[vlserv->m_iSockIndex]),   // WSAOVERLAPPED
     NULL);   // Completion function
  if (iRet <= 0)
  {
   if (WSAGetLastError() != WSA_IO_PENDING)
   {
    cout << "WSARecvFrom Failed" << WSAGetLastError() << endl;
    if (vlserv->EventArray[vlserv->m_iSockIndex] != WSA_INVALID_EVENT)
    {
     WSACloseEvent(vlserv->EventArray[vlserv->m_iSockIndex]); 
    }
    break;
   }
   else if (WSAGetLastError() == WSA_IO_PENDING)
   {
    cout << i << endl;
    continue;
   }
  }
/*
之后省去
*/
...
}
 
很奇怪.. 并没有申请其他内存 只是在recv等待数据 客户端都没有开启过
怎么会出现10055呢...

水的影子

unread,
Sep 1, 2008, 3:43:30 AM9/1/08
to 高性能网络编程邮件列表
不知道你为什么要在一个死循环里不停得调用WSARecvFrom,还有每次调用WSARecvFrom之前,都应该把overlapped结构清0才
是。
关注......
Reply all
Reply to author
Forward
0 new messages