小弟看的是微软的代码,如果ping一个不存在的ip,下面这句话怎么走不下去了 。
     bread = recvfrom(sockRaw,recvbuf,MAX_PACKET,0,(struct sockaddr*)&from, 
     if (bread == SOCKET_ERROR)
{
if (WSAGetLastError() == WSAETIMEDOUT)
continue;

printf("Erro4\n");
return -1;
          }

解决方案 »

  1.   

    你是说阻塞在recvfrom了吗?不应该吧设定一个接收超时试试看imeOut=6000;//设置接收超时6秒
    if(::setsockopt(cClient,SOL_SOCKET,SO_RCVTIMEO,(char *)&TimeOut,sizeof(TimeOut))==SOCKET_ERROR){
    return 0;
    }
      

  2.   

    ping不同的话,会有一个超时错误的,你的程序中有没有超时判断
      

  3.   

    按理来说微软的ping应该不是用raw socket啊,
    因为我用自己的raw socket sniffer能够嗅探出ping
    但是用raw socket发送的icmp,我的raw socket sniffer,
    想必是微软的ping不是用raw socket,具体的技术可能是TDI的隐藏开发接口。