我在编写Tracert程序时,使用UDP报文进行路由检查,UDP数据报发送成功,但是不能收到ICMP差错报文。接收源代码如下:
    main()
   {
     SendUdpData();
     RecvICMPData();
   }
   BOOL  WINAPI SendUdpData()
   {
      .........
     //发送UDP数据报文;
   }
   BOOL  WINAPI RecvICMPData()
  {
   SOCKET  ICMPSocket = WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,0);
   if(ICMPSocket == INVALID_SOCKET)
  {
    WSAGetLastError();
    printf("ICMPSocket Error!\n");
    return FALSE;
  }
  char  buf[1024];
  memset(buf,0,1024);
  if(recvfrom(ICMPSocket,buf,1024,0,NULL,0)==SOCKET_ERROR)
  {
   printf("%d\n",WSAGetLastError());//此处打印出错误类型位:10022
   return FALSE;
  }   
  }
调用WSAGetLastError()函数后,recvfrom函数调用失败,错误类型为10022
请高手指点,到底怎样接受ICMP端口不可达报文与ICMP超时报文。
有没有用UDP来检测路由的Tracert源代码?