高分请问-怎么设置UDP协议Socket的发送出去的TTL值

高分请教----如何设置UDP协议Socket的发送出去的TTL值
请教高手,我想设定一个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));


不知道上面的方法是否正确,还有该如何检验上面的方法的正确性。

谢谢大家了

------解决方案--------------------
udp是不可以读写icmp消息的,需要用raw socket
------解决方案--------------------
探讨
还有一个问题,UDP套接字如何接收ICMP包消息,并读取数据