public static Stream Connect(IpcEndpointConfig config, TimeSpan timeout) { if (config.Transport == IpcEndpointConfig.TransportType.NamedPipe) { var namedPipe = new NamedPipeClientStream( ".", config.Address, PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation); namedPipe.Connect((int)timeout.TotalMilliseconds); return(namedPipe); } else if (config.Transport == IpcEndpointConfig.TransportType.UnixDomainSocket) { var socket = new IpcUnixDomainSocket(); socket.Connect(new IpcUnixDomainSocketEndPoint(config.Address), timeout); return(new ExposedSocketNetworkStream(socket, ownsSocket: true)); } #if DIAGNOSTICS_RUNTIME else if (config.Transport == IpcEndpointConfig.TransportType.TcpSocket) { var tcpClient = new TcpClient(); var endPoint = new IpcTcpSocketEndPoint(config.Address); tcpClient.Connect(endPoint.EndPoint); return(tcpClient.GetStream()); } #endif else { throw new ArgumentException($"Unsupported IpcEndpointConfig transport type {config.Transport}"); } }
public override Stream Connect(TimeSpan timeout) { string address = GetDefaultAddress(); if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { var namedPipe = new NamedPipeClientStream( ".", address, PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation); namedPipe.Connect((int)timeout.TotalMilliseconds); return(namedPipe); } else { var socket = new IpcUnixDomainSocket(); socket.Connect(new IpcUnixDomainSocketEndPoint(Path.Combine(IpcRootPath, address)), timeout); return(new ExposedSocketNetworkStream(socket, ownsSocket: true)); } }