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

  1. On Unix, set IpcTransportOptions.NamedPipePath to the Unix socket file path the UniGetUI server listens on.
  2. Prefer the TCP transport (BaseAddress) on non-Windows platforms instead of named pipes.
  3. 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

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


AI-assisted analysis of Devolutions/UniGetUI@9b1d7d0eab (2026-08-13). Data as JSON: /api/errors/3675446c0eac94f5. Report an issue: GitHub.