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); } }
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)); } }
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 { } } }