diff options
| author | Ned T. Crigler <crigler@users.sourceforge.net> | 2006-09-27 23:56:29 +0000 |
|---|---|---|
| committer | Ned T. Crigler <crigler@users.sourceforge.net> | 2006-09-27 23:56:29 +0000 |
| commit | 5dbd8fe920992ff576b89fe0ff7bd104a6b05191 (patch) | |
| tree | 74b0ce012d45b5e57102b7b3e114094825a3fc84 /attach.c | |
| parent | e06f8dfcdf1dbf8ac6d12075c5da9f94a894f6a9 (diff) | |
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.
Diffstat (limited to 'attach.c')
| -rw-r--r-- | attach.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -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; |
