summaryrefslogtreecommitdiff
path: root/attach.c
diff options
context:
space:
mode:
Diffstat (limited to 'attach.c')
-rw-r--r--attach.c12
1 files changed, 12 insertions, 0 deletions
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;