diff --git a/transport/v2raygrpclite/client.go b/transport/v2raygrpclite/client.go index fee1fcf7..369d0bb2 100644 --- a/transport/v2raygrpclite/client.go +++ b/transport/v2raygrpclite/client.go @@ -12,6 +12,7 @@ import ( "github.com/sagernet/sing-box/adapter" "github.com/sagernet/sing-box/common/tls" "github.com/sagernet/sing-box/option" + "github.com/sagernet/sing-box/transport/v2rayhttp" M "github.com/sagernet/sing/common/metadata" N "github.com/sagernet/sing/common/network" @@ -93,3 +94,8 @@ func (c *Client) DialContext(ctx context.Context) (net.Conn, error) { }() return conn, nil } + +func (c *Client) Close() error { + v2rayhttp.CloseIdleConnections(c.transport) + return nil +} diff --git a/transport/v2rayhttp/client.go b/transport/v2rayhttp/client.go index d92d7df7..ddaff872 100644 --- a/transport/v2rayhttp/client.go +++ b/transport/v2rayhttp/client.go @@ -167,3 +167,8 @@ func (c *Client) dialHTTP2(ctx context.Context) (net.Conn, error) { }() return conn, nil } + +func (c *Client) Close() error { + CloseIdleConnections(c.transport) + return nil +} diff --git a/transport/v2rayhttp/pool.go b/transport/v2rayhttp/pool.go new file mode 100644 index 00000000..7e9ba64f --- /dev/null +++ b/transport/v2rayhttp/pool.go @@ -0,0 +1,13 @@ +package v2rayhttp + +import "net/http" + +type ConnectionPool interface { + CloseIdleConnections() +} + +func CloseIdleConnections(transport http.RoundTripper) { + if connectionPool, ok := transport.(ConnectionPool); ok { + connectionPool.CloseIdleConnections() + } +}