From 475c3f922c33f002d54501968fa4a61f2dec4112 Mon Sep 17 00:00:00 2001 From: Tetsuro Aoki Date: Mon, 13 Oct 2025 09:42:30 +0900 Subject: [PATCH] Fix DialContext blocking indefinitely --- memhttp.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/memhttp.go b/memhttp.go index c1cd520..a1cc176 100644 --- a/memhttp.go +++ b/memhttp.go @@ -190,14 +190,15 @@ func (l *memoryListener) Addr() net.Addr { // DialContext is the type expected by http.Transport.DialContext. func (l *memoryListener) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { + server, client := net.Pipe() select { + case <-ctx.Done(): + return nil, ctx.Err() + case l.conns <- server: + return client, nil case <-l.closed: return nil, errors.New("listener closed") - default: } - server, client := net.Pipe() - l.conns <- server - return client, nil } type memoryAddr struct{}