summaryrefslogtreecommitdiffstats
path: root/libvncserver/rfbserver.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvncserver/rfbserver.c')
-rw-r--r--libvncserver/rfbserver.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libvncserver/rfbserver.c b/libvncserver/rfbserver.c
index 12d1d72..e18f31d 100644
--- a/libvncserver/rfbserver.c
+++ b/libvncserver/rfbserver.c
@@ -51,6 +51,7 @@
#ifdef LIBVNCSERVER_HAVE_NETINET_IN_H
#include <netinet/in.h>
#include <netinet/tcp.h>
+#include <netdb.h>
#include <arpa/inet.h>
#endif
#endif
@@ -286,8 +287,12 @@ rfbNewTCPOrUDPClient(rfbScreenInfoPtr rfbScreen,
rfbProtocolVersionMsg pv;
rfbClientIteratorPtr iterator;
rfbClientPtr cl,cl_;
+#ifdef LIBVNCSERVER_IPv6
+ struct sockaddr_storage addr;
+#else
struct sockaddr_in addr;
- socklen_t addrlen = sizeof(struct sockaddr_in);
+#endif
+ socklen_t addrlen = sizeof(addr);
rfbProtocolExtension* extension;
cl = (rfbClientPtr)calloc(sizeof(rfbClientRec),1);
@@ -310,7 +315,17 @@ rfbNewTCPOrUDPClient(rfbScreenInfoPtr rfbScreen,
int one=1;
getpeername(sock, (struct sockaddr *)&addr, &addrlen);
+#ifdef LIBVNCSERVER_IPv6
+ char host[1024];
+ if(getnameinfo((struct sockaddr*)&addr, addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST) != 0) {
+ rfbLogPerror("rfbNewClient: error in getnameinfo");
+ cl->host = strdup("");
+ }
+ else
+ cl->host = strdup(host);
+#else
cl->host = strdup(inet_ntoa(addr.sin_addr));
+#endif
rfbLog(" other clients:\n");
iterator = rfbGetClientIterator(rfbScreen);