From 5dbd8fe920992ff576b89fe0ff7bd104a6b05191 Mon Sep 17 00:00:00 2001 From: "Ned T. Crigler" Date: Wed, 27 Sep 2006 23:56:29 +0000 Subject: Try to detect and remove stale sockets when dtach -A is used. Be paranoid about this, and only remove the specified file if connect says the connection was refused and stat says the file is a socket. Also dtach -A now only tries to create the socket if the connection was refused or the socket did not exist, instead of on any random error as before. --- attach.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'attach.c') diff --git a/attach.c b/attach.c index ece56db..9db3882 100644 --- a/attach.c +++ b/attach.c @@ -60,6 +60,18 @@ connect_socket(char *name) if (connect(s, (struct sockaddr*)&sockun, sizeof(sockun)) < 0) { close(s); + + /* ECONNREFUSED is also returned for regular files, so make + ** sure we are trying to connect to a socket. */ + if (errno == ECONNREFUSED) + { + struct stat st; + + if (stat(name, &st) < 0) + return -1; + else if (!S_ISSOCK(st.st_mode) || S_ISREG(st.st_mode)) + errno = ENOTSOCK; + } return -1; } return s; -- cgit v1.2.3