]> source.dussan.org Git - tigervnc.git/commitdiff
IPv6 loopback support too.
authorTim Waugh <twaugh@redhat.com>
Wed, 12 Nov 2014 12:31:51 +0000 (12:31 +0000)
committerTim Waugh <twaugh@redhat.com>
Wed, 12 Nov 2014 12:31:51 +0000 (12:31 +0000)
CMakeLists.txt
common/network/TcpSocket.cxx
config.h.in

index 1dcfd9edf3c01de7686fd0aceba0323d5b179355..01b14e1f9bf3b3a9a9848a87617a98db1c002d6a 100644 (file)
@@ -321,6 +321,7 @@ else()
   set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
 endif()
 check_function_exists(inet_aton HAVE_INET_ATON)
+check_function_exists(inet_pton HAVE_INET_PTON)
 check_function_exists(getaddrinfo HAVE_GETADDRINFO)
 set(CMAKE_EXTRA_INCLUDE_FILES) 
 set(CMAKE_REQUIRED_LIBRARIES)
index 052360bbee923ef45648dc4f0f925b9576c8ecd9..65a1a9930eb24f7f4f2407cbb08bb07b0f8816d2 100644 (file)
@@ -356,14 +356,11 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly,
     return;
   }
 
-  // - localhostOnly will mean "127.0.0.1 only", no IPv6
-  bool use_ipv6 = !localhostOnly;
+  bool use_ipv6;
   int af;
 #ifdef AF_INET6
-  if (use_ipv6)
-    af = AF_INET6;
-  else
-    af = AF_INET;
+  use_ipv6 = true;
+  af = AF_INET6;
 #else
   use_ipv6 = false;
   af = AF_INET;
@@ -411,8 +408,24 @@ TcpListener::TcpListener(const char *listenaddr, int port, bool localhostOnly,
     memset(&addr6, 0, (sa_len = sizeof(addr6)));
     addr6.sin6_family = af;
     addr6.sin6_port = htons(port);
-    sa = (struct sockaddr *)&addr6;
-  } else {
+
+    if (localhostOnly)
+      addr6.sin6_addr = in6addr_loopback;
+    else if (listenaddr != NULL) {
+#ifdef HAVE_INET_PTON
+      if (inet_pton(AF_INET6, listenaddr, &addr6.sin6_addr) != 1)
+       use_ipv6 = false;
+#else
+      // Unable to parse without inet_pton
+      use_ipv6 = false;
+#endif
+    }
+
+    if (use_ipv6)
+      sa = (struct sockaddr *)&addr6;
+  }
+
+  if (!use_ipv6) {
     memset(&addr, 0, (sa_len = sizeof(addr)));
     addr.sin_family = af;
     addr.sin_port = htons(port);
index a50e723d1f9346fcd1637ca969a6226f90c7428c..490d7f6d963d6b0c4bc692ba2b4b6de5a112130f 100644 (file)
@@ -2,6 +2,7 @@
 #define PACKAGE_VERSION "@VERSION@"
 
 #cmakedefine HAVE_INET_ATON
+#cmakedefine HAVE_INET_PTON
 #cmakedefine HAVE_GETADDRINFO
 #cmakedefine HAVE_GNUTLS_SET_GLOBAL_ERRNO
 #cmakedefine HAVE_GNUTLS_SET_ERRNO