From 98f633ebdec792cadb61307a053a472daaf5deb3 Mon Sep 17 00:00:00 2001 From: Flik Date: Fri, 9 Jan 2026 22:03:50 +0800 Subject: [PATCH] 1 --- internal/server/tunnel/server.go | 8 ++++++++ pkg/plugin/script/js.go | 2 ++ 2 files changed, 10 insertions(+) diff --git a/internal/server/tunnel/server.go b/internal/server/tunnel/server.go index 35b8ccb..31ecf8a 100644 --- a/internal/server/tunnel/server.go +++ b/internal/server/tunnel/server.go @@ -1317,6 +1317,14 @@ func (s *Server) pushClientInstalledPlugins(cs *ClientSession, alreadyPushed map if err := s.InstallJSPluginToClient(cs.ID, req); err != nil { log.Printf("[Server] Failed to restore plugin %s: %v", cp.Name, err) } else if cp.RemotePort > 0 { + // 检查端口是否已在监听(避免重复启动) + cs.mu.Lock() + _, exists := cs.Listeners[cp.RemotePort] + cs.mu.Unlock() + if exists { + continue + } + // 安装成功后启动服务端监听器 pluginRule := protocol.ProxyRule{ Name: cp.Name, diff --git a/pkg/plugin/script/js.go b/pkg/plugin/script/js.go index 75d5fc4..7ceee94 100644 --- a/pkg/plugin/script/js.go +++ b/pkg/plugin/script/js.go @@ -399,8 +399,10 @@ func (p *JSPlugin) httpServe(conn net.Conn, handler goja.Callable) { buf := make([]byte, 4096) n, err := conn.Read(buf) if err != nil { + fmt.Printf("[JS:%s] httpServe read error: %v\n", p.name, err) return } + fmt.Printf("[JS:%s] httpServe read %d bytes\n", p.name, n) req := parseHTTPRequest(buf[:n])