WSARecvFrom的奇怪有关问题

WSARecvFrom的奇怪问题
下面这个接收过程,当我接收一个大小为MAX_PACKET_SIZE的包时,接收一次,再接收就失败了,但是如果我把MAX_PACKET_SIZE加1或减1就能够连续接收(减有些数字还是不能,MAX_PACKET_SIZE=1024),是什么原因?

DWORD   WINAPI   CP2PClient::RecvThreadProc(LPVOID   lpParam)
{
CP2PClient   *pThis   =   (CP2PClient   *)lpParam;
char   buff[MAX_PACKET_SIZE];
sockaddr_in   remoteAddr;
int   nAddrLen   =   sizeof(remoteAddr);
WSABUF   wsaBuf;
wsaBuf.buf   =   buff;
wsaBuf.len   =   MAX_PACKET_SIZE;

while(TRUE)
{
DWORD   dwRecv,   dwFlags   =   0;
int   nRet   =   ::WSARecvFrom(pThis-> m_s,   &wsaBuf,  
1,   &dwRecv,   &dwFlags,   (sockaddr*)&remoteAddr,   &nAddrLen,   &pThis-> m_ol,   NULL);
if(nRet   ==   SOCKET_ERROR   &&   ::WSAGetLastError()   ==   WSA_IO_PENDING)
{
::WSAGetOverlappedResult(pThis-> m_s,   &pThis-> m_ol,   &dwRecv,   TRUE,   &dwFlags);
}

if(pThis-> m_bThreadExit)
break;
pThis-> HandleIO(buff,   dwRecv,   (sockaddr   *)&remoteAddr,   nAddrLen);
}
return   0;
}

------解决方案--------------------
..有这有接收的吗?接收事件因该是你完成事件通知的时候在接收,这个好循环接收的吗?