예제 #1
0
        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));
        }
예제 #5
0
        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}");
            }
        }