public static IDisposable Create(AppFunc app, IDictionary <string, object> properties)
        {
            var factory = new Http.ServerFactory();

            var created = new List <IDisposable>();

            var addresses = Addresses(properties);

            if (addresses != null)
            {
                foreach (var address in addresses)
                {
                    var port     = Port(address);
                    var hostname = Host(address);
                    if (hostname == null || hostname == "*" || hostname == "+")
                    {
                        created.Add(factory.Create(app, new IPEndPoint(IPAddress.Any, port)));

                        Kickstart(new IPEndPoint(IPAddress.Loopback, port));
                    }
                    else
                    {
                        foreach (var ipAddress in Dns.GetHostAddresses(hostname))
                        {
                            var endpoint = new IPEndPoint(ipAddress, port);

                            created.Add(factory.Create(app, endpoint));

                            Kickstart(endpoint);
                        }
                    }
                }
            }
            return(new Disposable(
                       () =>
            {
                foreach (var disposable in created)
                {
                    disposable.Dispose();
                }
            }));
        }
        public static IDisposable Create(AppFunc app, IDictionary<string, object> properties)
        {
            var factory = new Http.ServerFactory();

            var created = new List<IDisposable>();

            var addresses = Addresses(properties);
            if (addresses != null)
            {
                foreach (var address in addresses)
                {
                    var port = Port(address);
                    var hostname = Host(address);
                    if (hostname == null || hostname == "*" || hostname == "+")
                    {
                        created.Add(factory.Create(app, new IPEndPoint(IPAddress.Any, port)));

                        Kickstart(new IPEndPoint(IPAddress.Loopback, port));
                    }
                    else
                    {
                        foreach (var ipAddress in Dns.GetHostAddresses(hostname))
                        {
                            var endpoint = new IPEndPoint(ipAddress, port);

                            created.Add(factory.Create(app, endpoint));

                            Kickstart(endpoint);
                        }
                    }
                }
            }
            return new Disposable(
                () =>
                {
                    foreach (var disposable in created)
                    {
                        disposable.Dispose();
                    }
                });
        }