|
@@ -64,33 +64,20 @@ UdpSocket::~UdpSocket()
|
|
}
|
|
}
|
|
|
|
|
|
bool UdpSocket::send(const InetAddress &to,const void *msg,unsigned int msglen)
|
|
bool UdpSocket::send(const InetAddress &to,const void *msg,unsigned int msglen)
|
|
-{
|
|
|
|
- return sendWithHopLimit(to,msg,msglen,0);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-bool UdpSocket::sendWithHopLimit(const InetAddress &to,const void *msg,unsigned int msglen,int hopLimit)
|
|
|
|
{
|
|
{
|
|
#ifdef ZT_BREAK_UDP
|
|
#ifdef ZT_BREAK_UDP
|
|
return true;
|
|
return true;
|
|
#else
|
|
#else
|
|
- if (hopLimit <= 0)
|
|
|
|
- hopLimit = 255;
|
|
|
|
if (to.isV6()) {
|
|
if (to.isV6()) {
|
|
#ifdef __WINDOWS__
|
|
#ifdef __WINDOWS__
|
|
- DWORD hltmp = (DWORD)hopLimit;
|
|
|
|
- setsockopt(_sock,IPPROTO_IPV6,IPV6_UNICAST_HOPS,(const char *)&hltmp,sizeof(hltmp));
|
|
|
|
return ((int)sendto(_sock,(const char *)msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
return ((int)sendto(_sock,(const char *)msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
#else
|
|
#else
|
|
- setsockopt(_sock,IPPROTO_IPV6,IPV6_UNICAST_HOPS,&hopLimit,sizeof(hopLimit));
|
|
|
|
return ((int)sendto(_sock,msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
return ((int)sendto(_sock,msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
#endif
|
|
#endif
|
|
} else {
|
|
} else {
|
|
#ifdef __WINDOWS__
|
|
#ifdef __WINDOWS__
|
|
- DWORD hltmp = (DWORD)hopLimit;
|
|
|
|
- setsockopt(_sock,IPPROTO_IP,IP_TTL,(const char *)&hltmp,sizeof(hltmp));
|
|
|
|
return ((int)sendto(_sock,(const char *)msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
return ((int)sendto(_sock,(const char *)msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
#else
|
|
#else
|
|
- setsockopt(_sock,IPPROTO_IP,IP_TTL,&hopLimit,sizeof(hopLimit));
|
|
|
|
return ((int)sendto(_sock,msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
return ((int)sendto(_sock,msg,msglen,0,to.saddr(),to.saddrLen()) == (int)msglen);
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|