فهرست منبع

Merge pull request #26402 from qudongfang/ensure_client_transport_be_closed

ensure transport.Client be closed
Tibor Vass 8 سال پیش
والد
کامیت
335a3c6149
2فایلهای تغییر یافته به همراه18 افزوده شده و 0 حذف شده
  1. 13 0
      client/client.go
  2. 5 0
      client/client_test.go

+ 13 - 0
client/client.go

@@ -168,6 +168,19 @@ func NewClient(host string, version string, client *http.Client, httpHeaders map
 	}, nil
 	}, nil
 }
 }
 
 
+// Close ensures that transport.Client is closed
+// especially needed while using NewClient with *http.Client = nil
+// for example
+// client.NewClient("unix:///var/run/docker.sock", nil, "v1.18", map[string]string{"User-Agent": "engine-api-cli-1.0"})
+func (cli *Client) Close() error {
+
+	if t, ok := cli.client.Transport.(*http.Transport); ok {
+		t.CloseIdleConnections()
+	}
+
+	return nil
+}
+
 // getAPIPath returns the versioned request path to call the api.
 // getAPIPath returns the versioned request path to call the api.
 // It appends the query parameters to the path if they are not empty.
 // It appends the query parameters to the path if they are not empty.
 func (cli *Client) getAPIPath(p string, query url.Values) string {
 func (cli *Client) getAPIPath(p string, query url.Values) string {

+ 5 - 0
client/client_test.go

@@ -162,6 +162,11 @@ func TestGetAPIPath(t *testing.T) {
 		if g != cs.e {
 		if g != cs.e {
 			t.Fatalf("Expected %s, got %s", cs.e, g)
 			t.Fatalf("Expected %s, got %s", cs.e, g)
 		}
 		}
+
+		err = c.Close()
+		if nil != err {
+			t.Fatalf("close client failed, error message: %s", err)
+		}
 	}
 	}
 }
 }