diff --git a/transport/v2raygrpclite/client.go b/transport/v2raygrpclite/client.go index acf83abc..31461d33 100644 --- a/transport/v2raygrpclite/client.go +++ b/transport/v2raygrpclite/client.go @@ -12,6 +12,7 @@ import ( "github.com/sagernet/sing-box/common/tls" "github.com/sagernet/sing-box/option" "github.com/sagernet/sing-box/transport/v2rayhttp" + E "github.com/sagernet/sing/common/exceptions" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -92,10 +93,13 @@ func (c *Client) DialContext(ctx context.Context) (net.Conn, error) { conn := newLateGunConn(pipeInWriter) go func() { response, err := c.transport.RoundTrip(request) - if err == nil { - conn.setup(response.Body, nil) - } else { + if err != nil { conn.setup(nil, err) + } else if response.StatusCode != 200 { + response.Body.Close() + conn.setup(nil, E.New("unexpected status: ", response.StatusCode, " ", response.Status)) + } else { + conn.setup(response.Body, nil) } }() return conn, nil diff --git a/transport/v2rayhttp/client.go b/transport/v2rayhttp/client.go index 80ff13db..08bb0e87 100644 --- a/transport/v2rayhttp/client.go +++ b/transport/v2rayhttp/client.go @@ -145,6 +145,7 @@ func (c *Client) dialHTTP2(ctx context.Context) (net.Conn, error) { if err != nil { conn.setup(nil, err) } else if response.StatusCode != 200 { + response.Body.Close() conn.setup(nil, E.New("unexpected status: ", response.StatusCode, " ", response.Status)) } else { conn.setup(response.Body, nil)