(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. * Return a file descriptor.
*/ */
@@ -355,18 +355,34 @@ int
connect_local_xsocket (unsigned dnr) connect_local_xsocket (unsigned dnr)
{ {
int fd; int fd;
struct sockaddr_un addr;
char **path; char **path;
for (path = x_sockets; *path; ++path) { for (path = x_sockets; *path; ++path) {
struct sockaddr_un addr;
fd = socket (AF_UNIX, SOCK_STREAM, 0); fd = socket (AF_UNIX, SOCK_STREAM, 0);
if (fd < 0) if (fd < 0)
err (1, "socket AF_UNIX"); break;
memset (&addr, 0, sizeof(addr)); memset (&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr); snprintf (addr.sun_path, sizeof(addr.sun_path), *path, dnr);
if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0) if (connect (fd, (struct sockaddr *)&addr, sizeof(addr)) == 0)
return fd; 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); err (1, "connecting to local display %u", dnr);
} }