From 705584d24a6ae1b59fb60e7a9afd998c97ae25bd Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Thu, 12 Jul 2001 09:48:02 +0000 Subject: [PATCH] (connect_local_xsocket): handle a tcp socket as last resort git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@10332 ec53bebd-3082-4978-b11e-865c3cabbd6b --- appl/kx/common.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/appl/kx/common.c b/appl/kx/common.c index 99884c8d9..eb8f84acf 100644 --- a/appl/kx/common.c +++ b/appl/kx/common.c @@ -347,7 +347,7 @@ chown_xsockets (int n, struct x_socket *sockets, uid_t uid, gid_t gid) } /* - * Connect to local display `dnr' with local transport. + * Connect to local display `dnr' with local transport or TCP. * Return a file descriptor. */ @@ -355,18 +355,34 @@ int connect_local_xsocket (unsigned dnr) { int fd; - struct sockaddr_un addr; char **path; for (path = x_sockets; *path; ++path) { + struct sockaddr_un addr; + fd = socket (AF_UNIX, SOCK_STREAM, 0); if (fd < 0) - err (1, "socket AF_UNIX"); + break; memset (&addr, 0, sizeof(addr)); addr.sun_family = AF_UNIX; snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr); if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0) return fd; + close(fd); + } + { + struct sockaddr_in addr; + + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) + err (1, "socket AF_INET"); + memset (&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); + addr.sin_port = htons(6000 + dnr); + if (connect(fd, (struct sockaddr *)&addr, sizeof(addr)) == 0) + return fd; + close(fd); } err (1, "connecting to local display %u", dnr); }