Devolutions/UniGetUI · error · InvalidOperationException
The Unix socket path is not available for the named-pipe tra
Error message
The Unix socket path is not available for the named-pipe transport.
What it means
Thrown in CreateHttpClient's named-pipe ConnectCallback when the transport is NamedPipe, the OS is not Windows, and options.NamedPipePath is null. On Windows the callback uses a NamedPipeClientStream by name; on Unix it needs a Unix domain socket file path, and without one it cannot connect.
Source
Thrown at src/UniGetUI.Interface.IpcApi/IpcClient.cs:1327
var handler = new SocketsHttpHandler
{
UseProxy = false,
ConnectCallback = async (_, cancellationToken) =>
{
if (OperatingSystem.IsWindows())
{
var pipeClient = new NamedPipeClientStream(
".",
options.NamedPipeName,
PipeDirection.InOut,
PipeOptions.Asynchronous
);
await pipeClient.ConnectAsync(cancellationToken);
return pipeClient;
}
string socketPath = options.NamedPipePath
?? throw new InvalidOperationException(
"The Unix socket path is not available for the named-pipe transport."
);
var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified);
await socket.ConnectAsync(
new UnixDomainSocketEndPoint(socketPath),
cancellationToken
);
return new NetworkStream(socket, ownsSocket: true);
},
};
return new HttpClient(handler)
{
BaseAddress = options.BaseAddress,
Timeout = Timeout.InfiniteTimeSpan,
};
}
View on GitHub (pinned to 9b1d7d0eab)
Solutions
- On Unix, set IpcTransportOptions.NamedPipePath to the Unix socket file path the UniGetUI server listens on.
- Prefer the TCP transport (BaseAddress) on non-Windows platforms instead of named pipes.
- Obtain transport options from the live endpoint registration rather than constructing them by hand, so the socket path is populated correctly.
Example fix
// before
var opts = new IpcTransportOptions { TransportKind = IpcTransportKind.NamedPipe, NamedPipeName = "unigetui" };
// after (on Linux/macOS)
var opts = new IpcTransportOptions { TransportKind = IpcTransportKind.NamedPipe, NamedPipeName = "unigetui", NamedPipePath = "/run/unigetui/ipc.sock" }; Defensive patterns
Strategy: validation
Validate before calling
static bool TransportOptionsAreSound(IpcTransportOptions o)
{
if (o.TransportKind != IpcTransportKind.NamedPipe) return true;
return OperatingSystem.IsWindows() || !string.IsNullOrWhiteSpace(o.NamedPipePath);
} Prevention
- On Unix, prefer the TCP transport unless you explicitly manage a socket path.
- Always source transport options from a live endpoint registration rather than hand-building them.
- Unit-test option construction on all target platforms.
When it happens
Trigger: Constructing an IpcClient with IpcTransportKind.NamedPipe on Linux/macOS without supplying NamedPipePath in IpcTransportOptions. This is a transport-configuration mismatch: named-pipe transport on Unix requires the socket file location.
Common situations: Cross-platform code that hardcodes the named-pipe transport assuming Windows semantics. A persisted endpoint registration from Windows being reused on a Unix host. Forgetting to populate NamedPipePath when building options manually.
Related errors
- string.IsNullOrWhiteSpace(content) ? response.ReasonPhrase :
- The IPC API token is not available. Start UniGetUI and try a
- GitHub sign-in is not configured for this build. UNIGETUI_GI
- No tracked operation with id "{operationId}" was found.
- Timed out while waiting for operation {operationId}.
AI-assisted analysis of Devolutions/UniGetUI@9b1d7d0eab (2026-08-13).
Data as JSON: /api/errors/3675446c0eac94f5.
Report an issue: GitHub.