From 556a351de83fc6f401b02213dae95731553c216d Mon Sep 17 00:00:00 2001 From: Loïc Minier Date: Mon, 24 Mar 2008 19:38:27 +0000 Subject: Bug #10489: Don't retry unix socket connect()s on ENOENT. If the socket isn't there, it's not gonna magically appear. Either it's a server socket and you should have just waited for the SIGUSR1 from the server, or it's a stale reference to an ICE socket. However, do retry once, so fallback from abstract to filesystem namespace works. Originally Debian bug #385976. --- diff --git a/Xtranssock.c b/Xtranssock.c index 8a7d2ec..da4afe9 100644 --- a/Xtranssock.c +++ b/Xtranssock.c @@ -2146,8 +2146,13 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port) errno = olderrno; /* - * If the error was ENOENT, the server may be starting up - * and we should try again. + * If the error was ENOENT, the server may be starting up; we used + * to suggest to try again in this case with + * TRANS_TRY_CONNECT_AGAIN, but this introduced problems for + * processes still referencing stale sockets in their environment. + * Hence, we now return a hard error, TRANS_CONNECT_FAILED, and it + * is suggested that higher level stacks handle retries on their + * level when they face a slow starting server. * * If the error was EWOULDBLOCK or EINPROGRESS then the socket * was non-blocking and we should poll using select @@ -2161,14 +2166,14 @@ TRANS(SocketUNIXConnect) (XtransConnInfo ciptr, char *host, char *port) else if (olderrno == EINTR) return TRANS_TRY_CONNECT_AGAIN; else if (olderrno == ENOENT) { - /* - * If opening as abstract socket failed, try again "normally" - */ - if (abstract) + /* If opening as abstract socket failed, try again normally */ + if (abstract) { ciptr->transptr->flags &= ~(TRANS_ABSTRACT); - return TRANS_TRY_CONNECT_AGAIN; - } - else { + return TRANS_TRY_CONNECT_AGAIN; + } else { + return TRANS_CONNECT_FAILED; + } + } else { PRMSG (2,"SocketUNIXConnect: Can't connect: errno = %d\n", EGET(),0, 0); -- cgit v0.7.2-37-g538c