@@ -173,7 +173,10 @@ func NewConn(options *Options) (*Conn, error) {
173
173
logIPSet := netipx.IPSetBuilder {}
174
174
logIPs , _ := logIPSet .IPSet ()
175
175
wireguardEngine .SetFilter (filter .New (netMap .PacketFilter , localIPs , logIPs , nil , Logger (options .Logger .Named ("packet-filter" ))))
176
+ dialContext , dialCancel := context .WithCancel (context .Background ())
176
177
server := & Conn {
178
+ dialContext : dialContext ,
179
+ dialCancel : dialCancel ,
177
180
closed : make (chan struct {}),
178
181
logger : options .Logger ,
179
182
magicConn : magicConn ,
@@ -229,9 +232,11 @@ func IP() netip.Addr {
229
232
230
233
// Conn is an actively listening Wireguard connection.
231
234
type Conn struct {
232
- mutex sync.Mutex
233
- closed chan struct {}
234
- logger slog.Logger
235
+ dialContext context.Context
236
+ dialCancel context.CancelFunc
237
+ mutex sync.Mutex
238
+ closed chan struct {}
239
+ logger slog.Logger
235
240
236
241
dialer * tsdial.Dialer
237
242
tunDevice * tstun.Wrapper
@@ -378,6 +383,7 @@ func (c *Conn) Close() error {
378
383
_ = l .closeNoLock ()
379
384
}
380
385
c .mutex .Unlock ()
386
+ c .dialCancel ()
381
387
_ = c .dialer .Close ()
382
388
_ = c .magicConn .Close ()
383
389
_ = c .netStack .Close ()
@@ -500,15 +506,12 @@ func (c *Conn) forwardTCP(conn net.Conn, port uint16) {
500
506
}
501
507
502
508
func (c * Conn ) forwardTCPToLocal (conn net.Conn , port uint16 ) {
503
- ctx , cancel := context .WithCancel (context .Background ())
504
- defer cancel ()
505
509
defer conn .Close ()
506
-
507
510
dialAddrStr := net .JoinHostPort ("127.0.0.1" , strconv .Itoa (int (port )))
508
511
var stdDialer net.Dialer
509
- server , err := stdDialer .DialContext (ctx , "tcp" , dialAddrStr )
512
+ server , err := stdDialer .DialContext (c . dialContext , "tcp" , dialAddrStr )
510
513
if err != nil {
511
- c .logger .Debug (ctx , "dial local port" , slog .F ("port" , port ), slog .Error (err ))
514
+ c .logger .Debug (c . dialContext , "dial local port" , slog .F ("port" , port ), slog .Error (err ))
512
515
return
513
516
}
514
517
defer server .Close ()
@@ -528,9 +531,9 @@ func (c *Conn) forwardTCPToLocal(conn net.Conn, port uint16) {
528
531
return
529
532
}
530
533
if err != nil {
531
- c .logger .Debug (ctx , "proxy connection closed with error" , slog .Error (err ))
534
+ c .logger .Debug (c . dialContext , "proxy connection closed with error" , slog .Error (err ))
532
535
}
533
- c .logger .Debug (ctx , "forwarded connection closed" , slog .F ("local_addr" , dialAddrStr ))
536
+ c .logger .Debug (c . dialContext , "forwarded connection closed" , slog .F ("local_addr" , dialAddrStr ))
534
537
}
535
538
536
539
type listenKey struct {
0 commit comments