From 5042980d794a7cf8af9201ac2da28bea8c5887b4 Mon Sep 17 00:00:00 2001 From: Ljcbaby <46277145+ljcbaby@users.noreply.github.com> Date: Wed, 10 Sep 2025 21:40:38 +0800 Subject: [PATCH] frontend multi listen --- frontend/main.go | 41 +++++++++++++++++++++++------------------ frontend/settings.go | 40 ++++++++++++++++++++-------------------- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/frontend/main.go b/frontend/main.go index 6d0d3e0..12372d4 100644 --- a/frontend/main.go +++ b/frontend/main.go @@ -12,7 +12,7 @@ type settingType struct { domain string proxyPort int whoisServer string - listen string + listen []string dnsInterface string netSpecificMode string titleBrand string @@ -35,24 +35,29 @@ func main() { parseSettings() ImportTemplates() - var l net.Listener - var err error + for _, listenAddr := range setting.listen { + go func(listenAddr string) { + var l net.Listener + var err error - if strings.HasPrefix(setting.listen, "/") { - // Delete existing socket file, ignore errors (will fail later anyway) - os.Remove(setting.listen) - l, err = net.Listen("unix", setting.listen) - } else { - listenAddr := setting.listen - if !strings.Contains(listenAddr, ":") { - listenAddr = ":" + listenAddr - } - l, err = net.Listen("tcp", listenAddr) + if strings.HasPrefix(listenAddr, "/") { + // Delete existing socket file, ignore errors (will fail later anyway) + os.Remove(listenAddr) + l, err = net.Listen("unix", listenAddr) + } else { + if !strings.Contains(listenAddr, ":") { + listenAddr = ":" + listenAddr + } + l, err = net.Listen("tcp", listenAddr) + } + + if err != nil { + panic(err) + } + + webServerStart(l) + }(listenAddr) } - if err != nil { - panic(err) - } - - webServerStart(l) + select {} } diff --git a/frontend/settings.go b/frontend/settings.go index 6171c7c..0880925 100644 --- a/frontend/settings.go +++ b/frontend/settings.go @@ -9,25 +9,25 @@ import ( ) type viperSettingType struct { - Servers string `mapstructure:"servers"` - Domain string `mapstructure:"domain"` - ProxyPort int `mapstructure:"proxy_port"` - WhoisServer string `mapstructure:"whois"` - Listen string `mapstructure:"listen"` - DNSInterface string `mapstructure:"dns_interface"` - NetSpecificMode string `mapstructure:"net_specific_mode"` - TitleBrand string `mapstructure:"title_brand"` - NavBarBrand string `mapstructure:"navbar_brand"` - NavBarBrandURL string `mapstructure:"navbar_brand_url"` - NavBarAllServer string `mapstructure:"navbar_all_servers"` - NavBarAllURL string `mapstructure:"navbar_all_url"` - BgpmapInfo string `mapstructure:"bgpmap_info"` - TelegramBotName string `mapstructure:"telegram_bot_name"` - ProtocolFilter string `mapstructure:"protocol_filter"` - NameFilter string `mapstructure:"name_filter"` - TimeOut int `mapstructure:"timeout"` - ConnectionTimeOut int `mapstructure:"connection_timeout"` - TrustProxyHeaders bool `mapstructure:"trust_proxy_headers"` + Servers string `mapstructure:"servers"` + Domain string `mapstructure:"domain"` + ProxyPort int `mapstructure:"proxy_port"` + WhoisServer string `mapstructure:"whois"` + Listen []string `mapstructure:"listen"` + DNSInterface string `mapstructure:"dns_interface"` + NetSpecificMode string `mapstructure:"net_specific_mode"` + TitleBrand string `mapstructure:"title_brand"` + NavBarBrand string `mapstructure:"navbar_brand"` + NavBarBrandURL string `mapstructure:"navbar_brand_url"` + NavBarAllServer string `mapstructure:"navbar_all_servers"` + NavBarAllURL string `mapstructure:"navbar_all_url"` + BgpmapInfo string `mapstructure:"bgpmap_info"` + TelegramBotName string `mapstructure:"telegram_bot_name"` + ProtocolFilter string `mapstructure:"protocol_filter"` + NameFilter string `mapstructure:"name_filter"` + TimeOut int `mapstructure:"timeout"` + ConnectionTimeOut int `mapstructure:"connection_timeout"` + TrustProxyHeaders bool `mapstructure:"trust_proxy_headers"` } // Parse settings with viper, and convert to legacy setting format @@ -52,7 +52,7 @@ func parseSettings() { pflag.String("whois", "whois.verisign-grs.com", "whois server for queries") viper.BindPFlag("whois", pflag.Lookup("whois")) - pflag.String("listen", "5000", "address or unix socket bird-lg is listening on") + pflag.StringSlice("listen", []string{"5000"}, "address or unix socket bird-lg is listening on") viper.BindPFlag("listen", pflag.Lookup("listen")) pflag.String("dns-interface", "asn.cymru.com", "dns zone to query ASN information")