diff --git a/main.go b/main.go index 5e8a4b7..123373b 100644 --- a/main.go +++ b/main.go @@ -155,39 +155,53 @@ func main() { } } - // 启动服务器:同时监听 TCP 和 Unix socket(如果配置了的话) - var wg sync.WaitGroup + // 启动服务器:TCP 和 Unix socket 按配置监听 + addr := config.Cfg.Server.Addr + unix := config.Cfg.Server.Unix - if config.Cfg.Server.Unix != "" { + if addr == "" && unix == "" { + log.Fatal("未配置任何监听地址,请设置 server.addr 或 server.unix") + } + + var wg sync.WaitGroup + started := 0 + + if unix != "" { wg.Add(1) + started++ go func() { defer wg.Done() // 清理残留的 socket 文件 - os.Remove(config.Cfg.Server.Unix) + os.Remove(unix) - listener, err := net.Listen("unix", config.Cfg.Server.Unix) + listener, err := net.Listen("unix", unix) if err != nil { log.Fatalf("监听 Unix socket 失败: %v", err) } // 设置 socket 文件权限,允许 nginx 等其他进程访问 - os.Chmod(config.Cfg.Server.Unix, 0666) - log.Printf("监听 Unix socket: %s", config.Cfg.Server.Unix) + os.Chmod(unix, 0666) + log.Printf("监听 Unix socket: %s", unix) if err := r.RunListener(listener); err != nil { log.Fatalf("Unix socket 服务启动失败: %v", err) } }() } - // TCP 始终监听 - wg.Add(1) - go func() { - defer wg.Done() - addr := config.Cfg.Server.Addr - log.Printf("监听 TCP: %s", addr) - if err := r.Run(addr); err != nil { - log.Fatalf("TCP 服务启动失败: %v", err) - } - }() + if addr != "" && addr != ":0" { + wg.Add(1) + started++ + go func() { + defer wg.Done() + log.Printf("监听 TCP: %s", addr) + if err := r.Run(addr); err != nil { + log.Fatalf("TCP 服务启动失败: %v", err) + } + }() + } + + if started == 0 { + log.Fatal("未配置任何有效监听地址") + } wg.Wait() }