diff --git a/client/internal/wgproxy/ebpf/wrapper.go b/client/internal/wgproxy/ebpf/wrapper.go index a220fa92e..b1db0b2db 100644 --- a/client/internal/wgproxy/ebpf/wrapper.go +++ b/client/internal/wgproxy/ebpf/wrapper.go @@ -85,7 +85,7 @@ func (p *ProxyWrapper) proxyToLocal(ctx context.Context) { defer p.WgeBPFProxy.removeTurnConn(uint16(p.wgEndpointAddr.Port)) buf := make([]byte, 1500) - for ctx.Err() == nil { + for { n, err := p.readFromRemote(ctx, buf) if err != nil { return diff --git a/client/internal/wgproxy/usp/proxy.go b/client/internal/wgproxy/usp/proxy.go index 1e1a51ea5..c526de73c 100644 --- a/client/internal/wgproxy/usp/proxy.go +++ b/client/internal/wgproxy/usp/proxy.go @@ -166,33 +166,31 @@ func (p *WGUserSpaceProxy) proxyToLocal(ctx context.Context) { }() buf := make([]byte, 1500) - for ctx.Err() == nil { - for { - n, err := p.remoteConn.Read(buf) - if err != nil { - if ctx.Err() != nil { - return - } - log.Errorf("failed to read from remote conn: %s, %s", p.remoteConn.RemoteAddr(), err) + for { + n, err := p.remoteConn.Read(buf) + if err != nil { + if ctx.Err() != nil { return } + log.Errorf("failed to read from remote conn: %s, %s", p.remoteConn.RemoteAddr(), err) + return + } - p.pausedMu.Lock() - if p.paused { - p.pausedMu.Unlock() - continue - } - - _, err = p.localConn.Write(buf[:n]) + p.pausedMu.Lock() + if p.paused { p.pausedMu.Unlock() + continue + } - if err != nil { - if ctx.Err() != nil { - return - } - log.Debugf("failed to write to wg interface conn: %s", err) - continue + _, err = p.localConn.Write(buf[:n]) + p.pausedMu.Unlock() + + if err != nil { + if ctx.Err() != nil { + return } + log.Debugf("failed to write to wg interface conn: %s", err) + continue } } }