Skip to content

jobserver support breaks if token FD is a socket #149023

@xim

Description

@xim

I have a custom jobserver implementation that shares a token pool across processes. That's exposed as a socket to the build system. E.g.

MAKEFLAGS="--jobserver-auth=5,5"

That doesn't work because of this snippet

let mut s_ififo = stat.st_mode;
s_ififo = libc::S_IFIFO as _;
if stat.st_mode & s_ififo == s_ififo {
    return Ok(());
}

My socket (S_IFSOCK) based jobserver works fine against all other uses that I've looked at, but not in Rust.

The GNU Jobserver Interaction spec says that R,W are file descriptors, but doesn't appear to mandate that they be pipes specifically.

auth option will have the form --jobserver-auth=R,W where ‘R’ and ‘W’ are non-negative integers representing file descriptors: ‘R’ is the read file descriptor and ‘W’ is the write file descriptor

Meta

rustc --version --verbose:

rustc 1.91.0-nightly (f8297e351 2025-10-28)
binary: rustc
commit-hash: f8297e351a40c1439a467bbbb6879088047f50b3
commit-date: 2025-10-28
host: x86_64-unknown-linux-gnu
release: 1.91.0-nightly
LLVM version: 21.1.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.S-needs-infoStatus: The issue lacks details necessary to triage or act on it.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions