收UDP包,为什么只能响应第一个包呢?该如何解决

收UDP包,为什么只能响应第一个包呢?
我用ethereal抓包时,可以看到udp包源源不断发到1719端口了,可是只响应了第一次。怎么回事啊。
//初始化socket
void   CSoftAgentView::initsocket()
{

HWND   hWnd=   this-> m_hWnd;
m_socket   =   WSASocket                                 //m_socket   为全局变量(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);//WSA_FLAG_OVERLAPPED
if(INVALID_SOCKET==m_socket)
{
AfxMessageBox( "创建套接字失败 ");
return   ;
}
addrSock.sin_family=AF_INET;//addrSock为全局变量
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSock.sin_port   =   htons(1719);

if(SOCKET_ERROR==bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR)))
{
      AfxMessageBox( "绑定失败! ");
}

if(SOCKET_ERROR==WSAAsyncSelect(m_socket,m_hWnd,READ2_MSG,FD_READ))
{
closesocket(m_socket);      
WSACleanup();      
AfxMessageBox( "注册网络读取事件失败! ");
return   ;
}

}

///响应代码
void   CSoftAgentView::OnRead2(UINT   wParam,LONG   lParam)
{      
CString   ss;
char   buff[1024];
int   length;
memset(buff,0,sizeof(buff));
switch(lParam)
{
case   FD_READ:
length   =   m_listenSock2.Receive(buff,sizeof(buff));
//test
  AfxMessageBox( "Received ");       //这句话只收到一次
//testend
if(length> 0)
{
  ss.Format(buff);
}
break;
default:
break;
}//END   CASE

}

------解决方案--------------------
协调双方收发速度,每个udp数据报小于512
------解决方案--------------------
so_recv 改大点