public void TcpSocketServerChannel_can_be_connected_to_on_any_aliased_Endpoint(IpMapping actual,
            IpMapping alias, AddressFamily family)
        {
            var inboundActual = MappingToEndpoint(actual);
            var inboundAlias = MappingToEndpoint(alias);
            var isIp = inboundAlias is IPEndPoint;

            if (IsMono && family == AddressFamily.InterNetworkV6)
            {
                Assert.True(true, "Mono currently does not support IPV6 in DNS resolution");
                return;
            }


            IChannel s = null;
            IChannel c = null;
            try
            {
                var sb = new ServerBootstrap()
                    .ChannelFactory(() => new TcpServerSocketChannel())
                    .PreferredDnsResolutionFamily(family)
                    .ChildHandler(new ActionChannelInitializer<TcpSocketChannel>(channel => { }))
                    .Group(_serverGroup);

                s = sb.BindAsync(inboundActual).Result;


                var cb = new ClientBootstrap()
                    .ChannelFactory(() => new TcpSocketChannel())
                    .Option(ChannelOption.TcpNodelay, true)
                    .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(100))
                    .PreferredDnsResolutionFamily(family)
                    .Handler(new ActionChannelInitializer<TcpSocketChannel>(channel => { }))
                    .Group(_clientGroup);

                EndPoint clientEp = isIp
                    ? new IPEndPoint(((IPEndPoint) inboundAlias).Address, ((IPEndPoint) s.LocalAddress).Port)
                    : (EndPoint) new DnsEndPoint(((DnsEndPoint) inboundAlias).Host, ((IPEndPoint) s.LocalAddress).Port);

                c = cb.ConnectAsync(clientEp).Result;
                c.WriteAndFlushAsync(Unpooled.Buffer(4).WriteInt(2)).Wait(20);

                Assert.True(c.IsOpen);
                Assert.True(c.IsActive);
                Assert.True(c.IsWritable);
            }
            finally
            {
                try
                {
                    c?.CloseAsync().Wait(TimeSpan.FromMilliseconds(200));
                    s?.CloseAsync().Wait(TimeSpan.FromMilliseconds(200));
                }
                catch
                {
                }
            }
        }
 public static EndPoint MappingToEndpoint(IpMapping map)
 {
     switch (map)
     {
         case IpMapping.AnyIpv4:
             return new IPEndPoint(IPAddress.Any, 0);
         case IpMapping.AnyIpv6:
             return new IPEndPoint(IPAddress.IPv6Any, 0);
         case IpMapping.LoopbackIpv4:
             return new IPEndPoint(IPAddress.Loopback, 0);
         case IpMapping.LoopbackIpv6:
             return new IPEndPoint(IPAddress.IPv6Loopback, 0);
         case IpMapping.Localhost:
         default:
             return new DnsEndPoint("localhost", 0);
     }
 }
Esempio n. 3
0
        public static EndPoint MappingToEndpoint(IpMapping map)
        {
            switch (map)
            {
            case IpMapping.AnyIpv4:
                return(new IPEndPoint(IPAddress.Any, 0));

            case IpMapping.AnyIpv6:
                return(new IPEndPoint(IPAddress.IPv6Any, 0));

            case IpMapping.LoopbackIpv4:
                return(new IPEndPoint(IPAddress.Loopback, 0));

            case IpMapping.LoopbackIpv6:
                return(new IPEndPoint(IPAddress.IPv6Loopback, 0));

            case IpMapping.Localhost:
            default:
                return(new DnsEndPoint("localhost", 0));
            }
        }
Esempio n. 4
0
        public void TcpSocketServerChannel_can_be_connected_to_on_any_aliased_Endpoint(IpMapping actual,
                                                                                       IpMapping alias, AddressFamily family)
        {
            var inboundActual = MappingToEndpoint(actual);
            var inboundAlias  = MappingToEndpoint(alias);
            var isIp          = inboundAlias is IPEndPoint;


            IChannel s = null;
            IChannel c = null;

            try
            {
                var sb = new ServerBootstrap()
                         .Channel <TcpServerSocketChannel>()
                         .PreferredDnsResolutionFamily(family)
                         .ChildHandler(new ActionChannelInitializer <TcpSocketChannel>(channel => { }))
                         .Group(_serverGroup);

                s = sb.BindAsync(inboundActual).Result;


                var cb = new ClientBootstrap()
                         .Channel <TcpSocketChannel>()
                         .Option(ChannelOption.TcpNodelay, true)
                         .Option(ChannelOption.ConnectTimeout, TimeSpan.FromMilliseconds(100))
                         .PreferredDnsResolutionFamily(family)
                         .Handler(new ActionChannelInitializer <TcpSocketChannel>(channel => { }))
                         .Group(_clientGroup);

                EndPoint clientEp = isIp
                    ? new IPEndPoint(((IPEndPoint)inboundAlias).Address, ((IPEndPoint)s.LocalAddress).Port)
                    : (EndPoint) new DnsEndPoint(((DnsEndPoint)inboundAlias).Host, ((IPEndPoint)s.LocalAddress).Port);

                c = cb.ConnectAsync(clientEp).Result;
                c.WriteAndFlushAsync(Unpooled.Buffer(4).WriteInt(2)).Wait(20);

                Assert.True(c.IsOpen);
                Assert.True(c.IsActive);
                Assert.True(c.IsWritable);
            }
            finally
            {
                try
                {
                    c?.CloseAsync().Wait(TimeSpan.FromMilliseconds(200));
                    s?.CloseAsync().Wait(TimeSpan.FromMilliseconds(200));
                }
                catch
                {
                }
            }
        }