summaryrefslogtreecommitdiff
path: root/9proc/src/linux
diff options
context:
space:
mode:
Diffstat (limited to '9proc/src/linux')
-rw-r--r--9proc/src/linux/probe.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/9proc/src/linux/probe.zig b/9proc/src/linux/probe.zig
index c2f1026..00c256e 100644
--- a/9proc/src/linux/probe.zig
+++ b/9proc/src/linux/probe.zig
@@ -542,7 +542,12 @@ pub fn Probe(comptime Srv: type) type {
const st = unixStat(@ptrCast(&sa.path)) catch return error.Occupied;
if (st) |s| {
if (s.mode & linux.S.IFMT != linux.S.IFSOCK) return error.Occupied;
- if (cloud9.post.probe(@ptrCast(&sa.path)) != .stale) return error.AlreadyListening;
+ // The probe wants the path, not the whole `sun_path`
+ // array: a 108-byte slice is past the address budget, and
+ // `probe` owns that uncertainty as `.live` — which would
+ // make every stale socket look like a live server.
+ const probe_path: [:0]const u8 = sa.path[0..path.len :0];
+ if (cloud9.post.probe(probe_path) != .stale) return error.AlreadyListening;
_ = linux.unlink(@ptrCast(&sa.path));
}
try p.check(linux.bind(lfd, @ptrCast(&sa), @sizeOf(linux.sockaddr.un)));