Update behaviour in QUIC listener handler

This commit is contained in:
Neil Alexander 2024-01-05 11:45:20 +00:00
parent 3dfa6d0cc9
commit 1e9a59edf9
No known key found for this signature in database
GPG Key ID: A02A2019A2BB0944

View File

@ -3,6 +3,7 @@ package core
import ( import (
"context" "context"
"crypto/tls" "crypto/tls"
"fmt"
"net" "net"
"net/url" "net/url"
"time" "time"
@ -77,20 +78,24 @@ func (l *linkQUIC) listen(ctx context.Context, url *url.URL, _ string) (net.List
go func() { go func() {
for { for {
qc, err := ql.Accept(ctx) qc, err := ql.Accept(ctx)
if err != nil { switch err {
case context.Canceled, context.DeadlineExceeded:
ql.Close() ql.Close()
fallthrough
case quic.ErrServerClosed:
return return
} case nil:
qs, err := qc.AcceptStream(ctx) qs, err := qc.AcceptStream(ctx)
if err != nil { if err != nil {
ql.Close() _ = qc.CloseWithError(1, fmt.Sprintf("stream error: %s", err))
return continue
} }
ch <- &linkQUICStream{ ch <- &linkQUICStream{
Connection: qc, Connection: qc,
Stream: qs, Stream: qs,
} }
} }
}
}() }()
return lql, nil return lql, nil
} }