public NetworkListener(NetworkListenerSettings settings) { _serverSocketEP = settings.EndPoint; var protocolType = ProtocolType.Unspecified; var ip = _serverSocketEP as IPEndPoint; if (ip != null) { protocolType = ProtocolType.Tcp; _isIPEndPoint = true; } _serverSocket = new Socket(_serverSocketEP.AddressFamily, SocketType.Stream, protocolType); if (Equals(ip?.Address, IPAddress.IPv6Any)) { _serverSocket.DualMode = true; } if (settings.ExclusiveAddressUse.HasValue) { _serverSocket.ExclusiveAddressUse = settings.ExclusiveAddressUse.Value; } if (settings.AllowNatTraversal.HasValue) { _serverSocket.SetIPProtectionLevel(settings.AllowNatTraversal.Value ? IPProtectionLevel.Unrestricted : IPProtectionLevel.EdgeRestricted); } _listenerBacklog = settings.ListenerBacklog ?? (int)SocketOptionName.MaxConnections; _socketNoDelay = settings.NoDelay; }
public NetworkListener(NetworkListenerSettings settings) { // TODO: logic to bind ipv4 and/or ipv6 ? _listener = new TcpListener(settings.IPEndPoint); if (settings.ExclusiveAddressUse.HasValue) { _listener.ExclusiveAddressUse = settings.ExclusiveAddressUse.Value; } if (settings.AllowNatTraversal.HasValue) { _listener.AllowNatTraversal(settings.AllowNatTraversal.Value); } _listenerBacklog = settings.ListenerBacklog; _socketNoDelay = settings.NoDelay; }
public virtual INetworkListener CreateListener(NetworkListenerSettings settings) { return(new NetworkListener(_logger, settings)); }