1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-10 09:50:43 +00:00
This commit is contained in:
Darien Raymond 2018-02-02 22:35:18 +01:00
parent cf832a4272
commit 384844f898
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169

View File

@ -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)