From 0e9b62f5cfdbde3a573b4793b7b54d5a37d671f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=87=E5=B3=B0?= Date: Mon, 1 Jun 2026 20:18:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsocket=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/web/server.go | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/internal/web/server.go b/internal/web/server.go index 842776f..e189676 100644 --- a/internal/web/server.go +++ b/internal/web/server.go @@ -4,6 +4,9 @@ import ( "fmt" "html/template" "math" + "net" + "os" + "strings" "mail_go/config" "mail_go/internal/storage" @@ -179,6 +182,25 @@ func (ws *WebServer) registerRoutes() { } // Start launches the HTTP server on the configured address. +// Supports both TCP (e.g. ":8080") and Unix socket (e.g. "/run/mail_go/web.sock"). func (ws *WebServer) Start() error { - return ws.engine.Run(ws.cfg.Addr) + addr := ws.cfg.Addr + + // Unix socket: 地址以 / 开头 + if strings.HasPrefix(addr, "/") { + // 清理旧的 socket 文件 + os.Remove(addr) + + listener, err := net.Listen("unix", addr) + if err != nil { + return fmt.Errorf("监听 Unix socket 失败 %s: %w", addr, err) + } + // 允许 nginx 等外部进程连接 + os.Chmod(addr, 0666) + + return ws.engine.RunListener(listener) + } + + // TCP 端口 + return ws.engine.Run(addr) }