4
4
"context"
5
5
"fmt"
6
6
"net"
7
+ "strings"
7
8
"sync"
8
9
9
10
guestagentclient "github.com/lima-vm/lima/pkg/guestagent/api/client"
@@ -42,6 +43,7 @@ func (p *ClosableListeners) Forward(ctx context.Context, client *guestagentclien
42
43
}
43
44
44
45
func (p * ClosableListeners ) Remove (_ context.Context , protocol , hostAddress , guestAddress string ) {
46
+ logrus .Debugf ("removing listener for hostAddress: %s, guestAddress: %s" , hostAddress , guestAddress )
45
47
key := key (protocol , hostAddress , guestAddress )
46
48
switch protocol {
47
49
case "tcp" , "tcp6" :
@@ -65,7 +67,6 @@ func (p *ClosableListeners) Remove(_ context.Context, protocol, hostAddress, gue
65
67
66
68
func (p * ClosableListeners ) forwardTCP (ctx context.Context , client * guestagentclient.GuestAgentClient , hostAddress , guestAddress string ) {
67
69
key := key ("tcp" , hostAddress , guestAddress )
68
- defer p .Remove (ctx , "tcp" , hostAddress , guestAddress )
69
70
70
71
p .listenersRW .Lock ()
71
72
_ , ok := p .listeners [key ]
@@ -75,16 +76,21 @@ func (p *ClosableListeners) forwardTCP(ctx context.Context, client *guestagentcl
75
76
}
76
77
tcpLis , err := Listen (ctx , p .listenConfig , hostAddress )
77
78
if err != nil {
78
- logrus .Errorf ("failed to accept TCP connection: %v" , err )
79
+ logrus .Errorf ("failed to listen to TCP connection: %v" , err )
79
80
p .listenersRW .Unlock ()
80
81
return
81
82
}
83
+ defer p .Remove (ctx , "tcp" , hostAddress , guestAddress )
82
84
p .listeners [key ] = tcpLis
83
85
p .listenersRW .Unlock ()
84
86
for {
85
87
conn , err := tcpLis .Accept ()
86
88
if err != nil {
87
89
logrus .Errorf ("failed to accept TCP connection: %v" , err )
90
+ if strings .Contains (err .Error (), "pseudoloopback" ) {
91
+ // don't stop forwarding because the forwarder has rejected a non-local address
92
+ continue
93
+ }
88
94
return
89
95
}
90
96
go HandleTCPConnection (ctx , client , conn , guestAddress )
0 commit comments