ICMP 中recvfrom的有关问题

ICMP 中recvfrom的问题
SOCKET   sRaw   =WSASocket(AF_INET,   SOCK_RAW,   IPPROTO_ICMP,   NULL,   0,   WSA_FLAG_OVERLAPPED);  
.....
nRet=::sendto(sRaw,buf,sizeof(ICMP_HDR)+32,0,(SOCKADDR*)&dest,sizeof(dest));
if(nRet==SOCKET_ERROR)
{
        MessageBox( "测速失败 ", "错误 ",MB_OK);
      return   0;
::GetLastError();
}
nRet=recvfrom(sRaw,recvBuf,512,0,(sockaddr*)&from,&len);
if(nRet==SOCKET_ERROR)
        if(::GetLastError()==WSAETIMEDOUT)
{
miss++;
count++;
continue;
                  }
问题是这个   recvfrom一直是接受超时?想不明白怎么回事,大家指教一下,谢谢

------解决方案--------------------
既然用WSA_FLAG_OVERLAPPED标志建立起来 socket,就是使用overlapped,要建立一个线称或者设置一个回调函数来得到“异步i/o”的结果;并且i/o函数要使用WSASendto,WSARecvfrom,你这样写是不对的,并且得到error应该用的是WSAGetLastError;

你如果不会使用overlapped i/o,我建议你还是使用 blocking socket mode,采用一次sendto,一次recvfrom,等你这种模式调试成功以后,在改成overlapped i/o不迟