diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-17 14:10:44 -0400 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-17 14:10:44 -0400 |
| commit | 76bc9968ff0ec7d044042f9214fa59efb3146685 (patch) | |
| tree | 23eb792895eb5b4b3cffafd4127bbeb3da7d9fa6 /node/UdpSocket.cpp | |
| parent | 557cc359b30aacff372f1b92a8f0f621fcd9c50f (diff) | |
| download | infinitytier-76bc9968ff0ec7d044042f9214fa59efb3146685.tar.gz infinitytier-76bc9968ff0ec7d044042f9214fa59efb3146685.zip | |
New simpler command interface via loopback UDP protected by a crypto token.
Diffstat (limited to 'node/UdpSocket.cpp')
| -rw-r--r-- | node/UdpSocket.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/node/UdpSocket.cpp b/node/UdpSocket.cpp index 95156fcc..8b48b3b0 100644 --- a/node/UdpSocket.cpp +++ b/node/UdpSocket.cpp @@ -49,6 +49,7 @@ namespace ZeroTier { UdpSocket::UdpSocket( + bool localOnly, int localPort, bool ipv6, void (*packetHandler)(UdpSocket *,void *,const InetAddress &,const void *,unsigned int), @@ -87,7 +88,9 @@ UdpSocket::UdpSocket( memset(&sin6,0,sizeof(sin6)); sin6.sin6_family = AF_INET6; sin6.sin6_port = htons(localPort); - memcpy(&(sin6.sin6_addr),&in6addr_any,sizeof(struct in6_addr)); + if (localOnly) + memcpy(&(sin6.sin6_addr.s6_addr),InetAddress::LO6.rawIpBytes(),16); + else memcpy(&(sin6.sin6_addr),&in6addr_any,sizeof(struct in6_addr)); if (::bind(_sock,(const struct sockaddr *)&sin6,sizeof(sin6))) { ::close(_sock); throw std::runtime_error("unable to bind to port"); @@ -109,7 +112,9 @@ UdpSocket::UdpSocket( memset(&sin,0,sizeof(sin)); sin.sin_family = AF_INET; sin.sin_port = htons(localPort); - sin.sin_addr.s_addr = INADDR_ANY; + if (localOnly) + memcpy(&(sin.sin_addr.s_addr),InetAddress::LO4.rawIpBytes(),4); + else sin.sin_addr.s_addr = INADDR_ANY; if (::bind(_sock,(const struct sockaddr *)&sin,sizeof(sin))) { ::close(_sock); throw std::runtime_error("unable to bind to port"); |
