diff -up vino-2.28.1/server/libvncserver/rfbserver.c.m1 vino-2.28.1/server/libvncserver/rfbserver.c
--- vino-2.28.1/server/libvncserver/rfbserver.c.m1	2015-08-28 09:34:35.769112768 -0400
+++ vino-2.28.1/server/libvncserver/rfbserver.c	2015-08-28 09:36:21.934112759 -0400
@@ -150,7 +150,7 @@ rfbNewClient(rfbScreenInfoPtr rfbScreen,
     struct sockaddr_storage addr;
     socklen_t addrlen = sizeof(addr);
     int i;
-    char host[NI_MAXHOST];
+    char host[NI_MAXHOST] = "(unresolved)";
     const char *prt = "unknown";
 
     cl = (rfbClientPtr)calloc(sizeof(rfbClientRec),1);
@@ -163,21 +163,32 @@ rfbNewClient(rfbScreenInfoPtr rfbScreen,
 
     {
       int one=1;
+      int gotHostName;
 
       getpeername(sock, (struct sockaddr *)&addr, &addrlen);
 
-      getnameinfo((struct sockaddr *)&addr,
-                  addrlen,
-                  host, sizeof(host),
-                  NULL, 0,
-                  0);
+      gotHostName = 0 == getnameinfo((struct sockaddr *)&addr,
+                                  addrlen,
+                                  host, sizeof(host),
+                                  NULL, 0,
+                                  0);
 
-      cl->host = strdup(host);
-
-      if (addr.ss_family == AF_INET)
+      if (addr.ss_family == AF_INET) {
         prt = "IPv4";
-      else if (addr.ss_family == AF_INET6)
+        if (!gotHostName) {
+          struct sockaddr_in *addr_in = (struct sockaddr_in *)&addr;
+          inet_ntop(AF_INET, &(addr_in->sin_addr), host, INET_ADDRSTRLEN);
+        }
+      }
+      else if (addr.ss_family == AF_INET6) {
         prt = "IPv6";
+        if (!gotHostName) {
+          struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)&addr;
+          inet_ntop(AF_INET6, &(addr_in6->sin6_addr), host, INET6_ADDRSTRLEN);
+        }
+      }
+
+      cl->host = strdup(host);
 
       rfbLog("[%s] Got connection from client %s\n", prt, cl->host);
 
