public static AcceptSocket Bind(UnixDomainSocketEndPoint unixDomainSocketEndPoint, ChannelWriter <ConnectionContext> acceptQueue, IoUringOptions options) { var socketPath = unixDomainSocketEndPoint.ToString(); var s = new LinuxSocket(AF_UNIX, SOCK_STREAM, 0, blocking: false); File.Delete(socketPath); s.Bind(unixDomainSocketEndPoint); s.Listen(options.ListenBacklog); return(new AcceptSocket(s, unixDomainSocketEndPoint, acceptQueue, null, options, null)); }
public static unsafe void ToSockAddr(this UnixDomainSocketEndPoint domainSocketEndPoint, sockaddr_un *addr) { var unixPath = domainSocketEndPoint.ToString(); *addr = default; addr->sun_family = AF_UNIX; var bytes = Encoding.UTF8.GetBytes(unixPath); var length = Math.Min(bytes.Length, sockaddr_un.sun_path_length - 1); bytes.AsSpan(0, length).CopyTo(new Span <byte>(addr->sun_path, length)); addr->sun_path[length] = 0; }
public void ProfilerCommandToActivity_UsesOtherEndPointAsEndPoint() { var unixEndPoint = new UnixDomainSocketEndPoint("https://opentelemetry.io/"); var activity = new Activity("redis-profiler"); var profiledCommand = new Mock <IProfiledCommand>(); profiledCommand.Setup(m => m.EndPoint).Returns(unixEndPoint); var result = RedisProfilerEntryToActivityConverter.ProfilerCommandToActivity(activity, profiledCommand.Object); Assert.Contains(result.Tags, kvp => kvp.Key == SemanticConventions.AttributePeerService); Assert.Equal(unixEndPoint.ToString(), result.Tags.FirstOrDefault(kvp => kvp.Key == SemanticConventions.AttributePeerService).Value); }
public void ProfilerCommandToActivity_UsesOtherEndPointAsEndPoint() { var unixEndPoint = new UnixDomainSocketEndPoint("https://opentelemetry.io/"); var activity = new Activity("redis-profiler"); var profiledCommand = new Mock <IProfiledCommand>(); profiledCommand.Setup(m => m.CommandCreated).Returns(DateTime.UtcNow); profiledCommand.Setup(m => m.EndPoint).Returns(unixEndPoint); var result = RedisProfilerEntryToActivityConverter.ProfilerCommandToActivity(activity, profiledCommand.Object, new StackExchangeRedisCallsInstrumentationOptions()); Assert.NotNull(result.GetTagValue(SemanticConventions.AttributePeerService)); Assert.Equal(unixEndPoint.ToString(), result.GetTagValue(SemanticConventions.AttributePeerService)); }
static void Main(string[] args) { var endpoint = new UnixDomainSocketEndPoint("server.sock"); using (Socket client = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified)) { Console.WriteLine($"client: connecting to {endpoint.ToString()}"); client.Connect(endpoint); var bytes = new byte[100]; int received = client.Receive(bytes); Console.WriteLine($"received: {received} bytes, {Encoding.UTF8.GetString(bytes)}"); Console.WriteLine($"client PID: {Process.GetCurrentProcess().Id}"); } }