From b02849ab807bf756a748ce7e174d85a745c49b1e Mon Sep 17 00:00:00 2001 From: Alexander Dorokhine Date: Fri, 30 Oct 2009 12:27:05 +0100 Subject: [PATCH] Fix hostname resolution problems under Windows On Windows, the WSA system needs to be initialized to be able to look up host names. This patch also changes *addr = 0 to use the constant INADDR_LOOPBACK instead, which seems to be required on Windows. --- libvncclient/sockets.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/libvncclient/sockets.c b/libvncclient/sockets.c index 135861e..bdfd811 100644 --- a/libvncclient/sockets.c +++ b/libvncclient/sockets.c @@ -250,13 +250,7 @@ WriteToRFBServer(rfbClient* client, char *buf, int n) * ConnectToTcpAddr connects to the given TCP port. */ -int -ConnectClientToTcpAddr(unsigned int host, int port) -{ - int sock; - struct sockaddr_in addr; - int one = 1; - +static int initSockets() { #ifdef WIN32 WSADATA trash; static rfbBool WSAinitted=FALSE; @@ -269,6 +263,18 @@ ConnectClientToTcpAddr(unsigned int host, int port) } } #endif + return 1; +} + +int +ConnectClientToTcpAddr(unsigned int host, int port) +{ + int sock; + struct sockaddr_in addr; + int one = 1; + + if (!initSockets()) + return -1; addr.sin_family = AF_INET; addr.sin_port = htons(port); @@ -464,7 +470,7 @@ StringToIPAddr(const char *str, unsigned int *addr) struct hostent *hp; if (strcmp(str,"") == 0) { - *addr = 0; /* local */ + *addr = htonl(INADDR_LOOPBACK); /* local */ return TRUE; } @@ -473,6 +479,9 @@ StringToIPAddr(const char *str, unsigned int *addr) if (*addr != -1) return TRUE; + if (!initSockets()) + return -1; + hp = gethostbyname(str); if (hp) {