@@ -83,16 +83,30 @@ func (d *Dialer) DialContextWithAddr(ctx context.Context, addr string) (net.Conn
8383}
8484
8585// DialContext creates proxied port-forwarded connections.
86- // ctx is currently unused, but fulfils the type signature used by GRPC.
87- func (d * Dialer ) DialContext (_ context.Context , _ string , addr string ) (net.Conn , error ) {
86+ func (d * Dialer ) DialContext (ctx context.Context , _ string , addr string ) (net.Conn , error ) {
87+ // Check if context is already cancelled or timed out
88+ select {
89+ case <- ctx .Done ():
90+ return nil , errors .Wrap (ctx .Err (), "context cancelled before establishing connection" )
91+ default :
92+ }
93+
8894 req := d .clientset .CoreV1 ().RESTClient ().
8995 Post ().
9096 Resource (d .proxy .Kind ).
9197 Namespace (d .proxy .Namespace ).
9298 Name (addr ).
9399 SubResource ("portforward" )
94100
95- dialer := spdy .NewDialer (d .upgrader , & http.Client {Transport : d .proxyTransport }, "POST" , req .URL ())
101+ httpClient := & http.Client {
102+ Transport : d .proxyTransport ,
103+ }
104+
105+ if deadline , ok := ctx .Deadline (); ok {
106+ httpClient .Timeout = time .Until (deadline )
107+ }
108+
109+ dialer := spdy .NewDialer (d .upgrader , httpClient , "POST" , req .URL ())
96110
97111 // Create a new connection from the dialer.
98112 //
0 commit comments