mirror of https://github.com/v2ray/v2ray-core
fix #840
parent
cf832a4272
commit
384844f898
|
@ -121,6 +121,7 @@ type udpConn struct {
|
|||
output func([]byte) (int, error)
|
||||
remote net.Addr
|
||||
local net.Addr
|
||||
ctx context.Context
|
||||
cancel context.CancelFunc
|
||||
}
|
||||
|
||||
|
@ -129,13 +130,14 @@ func (c *udpConn) updateActivity() {
|
|||
}
|
||||
|
||||
func (c *udpConn) Read(buf []byte) (int, error) {
|
||||
in, open := <-c.input
|
||||
if !open {
|
||||
select {
|
||||
case in := <-c.input:
|
||||
defer in.Release()
|
||||
c.updateActivity()
|
||||
return copy(buf, in.Bytes()), nil
|
||||
case <-c.ctx.Done():
|
||||
return 0, io.EOF
|
||||
}
|
||||
defer in.Release()
|
||||
c.updateActivity()
|
||||
return copy(buf, in.Bytes()), nil
|
||||
}
|
||||
|
||||
// Write implements io.Writer.
|
||||
|
@ -236,6 +238,7 @@ func (w *udpWorker) callback(b *buf.Buffer, source net.Destination, originalDest
|
|||
go func() {
|
||||
ctx := w.ctx
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
conn.ctx = ctx
|
||||
conn.cancel = cancel
|
||||
if originalDest.IsValid() {
|
||||
ctx = proxy.ContextWithOriginalTarget(ctx, originalDest)
|
||||
|
|
Loading…
Reference in New Issue