Exemplo n.º 1
0
        public async ValueTask <IQuickListeningSocket> GetListeningTcpSocketAsync(string hostNameOrAddresss, int bindingPort, bool overideAsLocal = false, bool verbatimAddress = false)
        {
            var key = GetSocketKey(ProtocolType.Tcp, SocketType.Stream, hostNameOrAddresss, bindingPort);

            if (ListeningSockets.ContainsKey(key))
            {
                return(ListeningSockets[key]);
            }
            else
            {
                var dnsEntry = await DnsCaching
                               .GetDnsEntryAsync(hostNameOrAddresss, bindingPort, overideAsLocal, verbatimAddress)
                               .ConfigureAwait(false);

                var quickListeningSocket = new QuickListeningSocket
                {
                    Socket   = new Socket(dnsEntry.PrimaryAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp),
                    DnsEntry = dnsEntry,
                };

                ListeningSockets[key] = quickListeningSocket;

                return(quickListeningSocket);
            }
        }
Exemplo n.º 2
0
 public QuickSocketFactory()
 {
     DnsCaching       = new DnsCaching(TimeSpan.FromHours(CachingExpiryInHours));
     Sockets          = new ConcurrentDictionary <string, QuickSocket>();
     ListeningSockets = new ConcurrentDictionary <string, QuickListeningSocket>();
 }