recvfrom为什么一直返回-1?高分急求,该如何处理

recvfrom为什么一直返回-1???高分急求
为什么recvfrom函数一直返回值-1啊??????
BOOL   CICMP::ReceiveICMPPack()
{
int   state;
int   len   =   sizeof(sockaddr_in);
char   *   addr;
        struct   hostent   *lpHostent   =   NULL;

addr   =   inet_ntoa(m_sockAddr.sin_addr);
state   =   recvfrom(winsock,(char   *)recvbuff,MAX_PACKET,0,
(struct   sockaddr*)&m_sockAddr,&len);
TRACE( "RECV   DONE   ");
if   (state   ==   SOCKET_ERROR)  
{
m_strInfo= "接收失败! ";
return   FALSE;
}
                  ...............
创建一个线程接收:
UINT   ThreadReceive(LPVOID   pParam)                    
{
SubThreadInfo*   pInfo   =   (SubThreadInfo*)pParam;
CReceiveICMPDlg*   pThreadDlg   =   (CReceiveICMPDlg*)pInfo-> pDialog;

CICMP   m_icmp;
CString   IPStr=pInfo-> IPStr;
CString   strI;
CString   s;
BOOL   flag;
TRACE( "START   THREAD\n ");

m_icmp.Initialize();
TRACE( "After   Intialization\n ");
for(int   i=0;i <=30;i++)///////////////////////////////////???????
{
if(m_icmp.ReceiveICMPPack((char   *)(LPCSTR)IPStr))    
{
TRACE( "HERER ");
flag=m_icmp.ReceiveICMPPack();
}
TRACE( "AFTER   IF ");

if(flag==TRUE)
{
    s.Format( "%d ",i);
    int   j=pInfo-> list-> InsertItem(0,s);
    strI.Format( "%d ",i);
            pInfo-> list-> SetItemText(i,1,m_icmp.type);
            pInfo-> list-> SetItemText(i,2,m_icmp.IpOrPort);
    pInfo-> list-> SetItemText(i,3,m_icmp.num);  
    pInfo-> list-> SetItemText(i,4,m_icmp.deal);  
    pInfo-> state-> SetWindowText(m_icmp.m_strInfo);
      pInfo-> Number-> SetSel(0,-1);
    pInfo-> Number-> ReplaceSel(strI);
    Sleep(100);
}

if(WaitForSingleObject(eventStopReceive.m_hObject,   0)   ==   WAIT_OBJECT_0)
  break;
}
      pThreadDlg-> Routeflag=TRUE;
      return   0;
}
我跟踪着看,执行到recvfrom就立刻执行下一步,怎么不阻塞了啊?

------解决方案--------------------
WSAGetLastError看看错误代码是什么?你的ip正确吗?