From 84658f7499a6806a06c06091739977d3e4edefdc Mon Sep 17 00:00:00 2001 From: Zhuowei Wang Date: Thu, 24 Oct 2024 11:02:48 +0800 Subject: [PATCH] fix: dail connection return io timeout when ctx.Done happen --- connection_test.go | 2 +- net_polldesc.go | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/connection_test.go b/connection_test.go index 65dd69ff..2365f3d1 100644 --- a/connection_test.go +++ b/connection_test.go @@ -763,7 +763,7 @@ func TestConnectionDailTimeoutAndClose(t *testing.T) { go func() { defer wg.Done() conn, err := DialConnection("tcp", address, time.Nanosecond) - Assert(t, err == nil || strings.Contains(err.Error(), "i/o timeout")) + Assert(t, err == nil || strings.Contains(err.Error(), "i/o timeout"), err) _ = conn }() } diff --git a/net_polldesc.go b/net_polldesc.go index 89becc90..c72bdcca 100644 --- a/net_polldesc.go +++ b/net_polldesc.go @@ -52,22 +52,21 @@ func (pd *pollDesc) WaitWrite(ctx context.Context) (err error) { } select { + case <-pd.writeTrigger: // triggered by poller case <-pd.closeTrigger: // triggered by poller // no need to detach, since poller has done it in OnHup. return Exception(ErrConnClosed, "by peer") - case <-pd.writeTrigger: // triggered by poller - err = nil case <-ctx.Done(): // triggered by ctx // deregister from poller, upper caller function will close fd pd.detach() - err = mapErr(ctx.Err()) + return mapErr(ctx.Err()) } // double check close trigger select { case <-pd.closeTrigger: return Exception(ErrConnClosed, "by peer") default: - return err + return nil } }