请教高手,我想设定一个UDP包消息的TTL值,采用了下面的方法:
int curTTL = 0; //当前的TTL
int lenTTL = sizeof(int);//获取当前的TTL值
getsockopt(m_hSocket , IPPROTO_IP, IP_TTL, (char *)&curTTL, &lenTTL);//m_hSocket为UDP套接字
//设置新的TTL值
setsockopt(m_hSocket, IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl));
//给远程主机发送数据
::sendto( m_hSocket, (const char*)lpBuf, nBufLen, 0, (sockaddr*)&addr_inet, addrlen );
还原TTL值
setsockopt(m_hSocket , IPPROTO_IP, IP_TTL, (char *)&curTTL, sizeof(curTTL));
不知道上面的方法是否正确,还有该如何检验上面的方法的正确性。谢谢大家了

解决方案 »

  1.   

    还有一个问题,UDP套接字如何接收ICMP包消息,并读取数据
      

  2.   

    udp是不可以读写icmp消息的,需要用raw socket
      

  3.   

    UDP协议和ICMP协议是不一样的,UDP 协议号 17
    TCP 协议号 6
    ICMP 协议号 1
    UDP和ICMP是不同协议类型的报文,UDP无法处理ICMP消息,底层也不会把ICMP报文送给UDP模块处理,你这协议之间的关系没搞清楚。