瀏覽代碼

Fix issues related to android client (#4616)

* WireGuard: Fix tunnel not closed

* Dialer: Apply controllers in lc.Control
Cl-He-O 6 月之前
父節點
當前提交
7a2f42f8d5
共有 3 個文件被更改,包括 20 次插入0 次删除
  1. 1 0
      app/proxyman/outbound/handler.go
  2. 14 0
      proxy/wireguard/client.go
  3. 5 0
      transport/internet/system_dialer.go

+ 1 - 0
app/proxyman/outbound/handler.go

@@ -325,6 +325,7 @@ func (h *Handler) Start() error {
 // Close implements common.Closable.
 func (h *Handler) Close() error {
 	common.Close(h.mux)
+	common.Close(h.proxy)
 	return nil
 }
 

+ 14 - 0
proxy/wireguard/client.go

@@ -77,6 +77,20 @@ func New(ctx context.Context, conf *DeviceConfig) (*Handler, error) {
 	}, nil
 }
 
+func (h *Handler) Close() (err error) {
+	go func() {
+		h.wgLock.Lock()
+		defer h.wgLock.Unlock()
+
+		if h.net != nil {
+			_ = h.net.Close()
+			h.net = nil
+		}
+	}()
+
+	return nil
+}
+
 func (h *Handler) processWireGuard(ctx context.Context, dialer internet.Dialer) (err error) {
 	h.wgLock.Lock()
 	defer h.wgLock.Unlock()

+ 5 - 0
transport/internet/system_dialer.go

@@ -61,6 +61,11 @@ func (d *DefaultSystemDialer) Dial(ctx context.Context, src net.Address, dest ne
 		}
 		var lc net.ListenConfig
 		lc.Control = func(network, address string, c syscall.RawConn) error {
+			for _, ctl := range d.controllers {
+				if err := ctl(network, address, c); err != nil {
+					errors.LogInfoInner(ctx, err, "failed to apply external controller")
+				}
+			}
 			return c.Control(func(fd uintptr) {
 				if sockopt != nil {
 					if err := applyOutboundSocketOptions(network, "", fd, sockopt); err != nil {