(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
This commit is contained in:
Assar Westerlund
2001-07-12 09:48:02 +00:00
parent 210773f226
commit 705584d24a

View File

@@ -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);
}