public TcpTransportListener(ConnectionListener listener, string host, int port)
{
this.Listener = listener;
List<IPAddress> addresses = new List<IPAddress>();
IPAddress ipAddress;
if (host.Equals("localhost", StringComparison.OrdinalIgnoreCase) ||
host.Equals(Environment.GetEnvironmentVariable("COMPUTERNAME"), StringComparison.OrdinalIgnoreCase) ||
host.Equals(Amqp.TaskExtensions.GetHostEntryAsync(string.Empty).Result.HostName, StringComparison.OrdinalIgnoreCase))
{
if (Socket.OSSupportsIPv4)
{
addresses.Add(IPAddress.Any);
}
if (Socket.OSSupportsIPv6)
{
addresses.Add(IPAddress.IPv6Any);
}
}
else if (IPAddress.TryParse(host, out ipAddress))
{
addresses.Add(ipAddress);
}
else
{
addresses.AddRange(Amqp.TaskExtensions.GetHostAddressesAsync(host).GetAwaiter().GetResult());
}
this.listenSockets = new Socket[addresses.Count];
for (int i = 0; i < addresses.Count; ++i)
{
this.listenSockets[i] = new Socket(addresses[i].AddressFamily, SocketType.Stream, ProtocolType.Tcp) { NoDelay = true };
this.listenSockets[i].Bind(new IPEndPoint(addresses[i], port));
this.listenSockets[i].Listen(20);
}
}