From 825df3c26c425d8f5b772dec5f248fbe7c01b16c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0?= Date: Thu, 28 May 2026 16:03:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20TCP=20=E7=9B=91=E5=90=AC=E4=B9=9F?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9D=A1=E4=BB=B6=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server.addr 为空或 ':0' 时不监听 TCP - 两个都为空时启动报错,至少要配一个 - 灵活组合:仅TCP / 仅Unix / 双监听 --- main.go | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) 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() }