Skip to content

Commit b1acd06

Browse files
committed
Only unlink socket on ECONNREFUSED, not on any connect failure
connect() can fail with EAGAIN (backlog full) or EACCES (permissions) when the daemon IS alive. Only ECONNREFUSED means no listener (stale socket from crashed daemon). Other errors: assume daemon is alive and let proxy_connect handle it.
1 parent 22de714 commit b1acd06

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

ext/stoolap.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1260,9 +1260,16 @@ static int ensure_daemon_running(void)
12601260
close(probe);
12611261
return 0; /* daemon is alive */
12621262
}
1263+
int err = errno;
12631264
close(probe);
1264-
/* Stale socket from crashed daemon — remove so bind() can succeed */
1265-
unlink(STOOLAP_DAEMON_SOCK);
1265+
if (err == ECONNREFUSED) {
1266+
/* No listener — stale socket from crashed daemon */
1267+
unlink(STOOLAP_DAEMON_SOCK);
1268+
} else {
1269+
/* Other error (EAGAIN, EACCES, etc.) — daemon may be alive
1270+
* but busy or inaccessible. Don't unlink. Let bind() decide. */
1271+
return 0;
1272+
}
12661273
}
12671274
}
12681275

0 commit comments

Comments
 (0)