diff options
| author | Ben Klopfenstein <benklop@gmail.com> | 2009-05-12 01:51:23 +0200 |
|---|---|---|
| committer | Johannes Schindelin <johannes.schindelin@gmx.de> | 2009-05-12 14:46:25 +0200 |
| commit | d7c0b34b62c8edd302e273588bae7467ecbfb987 (patch) | |
| tree | 33d09f8112f19a0be53820a429e81da43269f9b9 /libvncclient/rfbproto.c | |
| parent | 4088906b1341709435318226790b06296420a5e2 (diff) | |
| download | libtdevnc-d7c0b34b.tar.gz libtdevnc-d7c0b34b.zip | |
libvncclient: Unix sockets support by Ben Klopfenstein
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Diffstat (limited to 'libvncclient/rfbproto.c')
| -rw-r--r-- | libvncclient/rfbproto.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/libvncclient/rfbproto.c b/libvncclient/rfbproto.c index 07584f6..5a83e47 100644 --- a/libvncclient/rfbproto.c +++ b/libvncclient/rfbproto.c @@ -29,6 +29,8 @@ #endif #ifndef WIN32 #include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> #else #define strncasecmp _strnicmp #endif @@ -342,6 +344,15 @@ DefaultSupportedMessagesTightVNC(rfbClient* client) SetServer2Client(client, rfbTextChat); } +static rfbBool +IsUnixSocket(const char *name) +{ + struct stat sb; + if(stat(name, &sb) && (sb.st_mode & S_IFMT) == S_IFSOCK) + return TRUE; + return FALSE; +} + /* * ConnectToRFBServer. */ @@ -378,13 +389,21 @@ ConnectToRFBServer(rfbClient* client,const char *hostname, int port) return TRUE; } - if (!StringToIPAddr(hostname, &host)) { - rfbClientLog("Couldn't convert '%s' to host address\n", hostname); - return FALSE; +#ifndef WIN32 + if(IsUnixSocket(hostname)) + /* serverHost is a UNIX socket. */ + client->sock = ConnectClientToUnixSock(hostname); + else +#endif + { + /* serverHost is a hostname */ + if (!StringToIPAddr(hostname, &host)) { + rfbClientLog("Couldn't convert '%s' to host address\n", hostname); + return FALSE; + } + client->sock = ConnectClientToTcpAddr(host, port); } - client->sock = ConnectClientToTcpAddr(host, port); - if (client->sock < 0) { rfbClientLog("Unable to connect to VNC server\n"); return FALSE; |
