summaryrefslogtreecommitdiff
path: root/node/UdpSocket.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-17 14:10:44 -0400
committerAdam Ierymenko <adam.ierymenko@gmail.com>2013-07-17 14:10:44 -0400
commit76bc9968ff0ec7d044042f9214fa59efb3146685 (patch)
tree23eb792895eb5b4b3cffafd4127bbeb3da7d9fa6 /node/UdpSocket.cpp
parent557cc359b30aacff372f1b92a8f0f621fcd9c50f (diff)
downloadinfinitytier-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.cpp9
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");