@@ -228,6 +228,15 @@ def response_timeout_callback(self):
228228 self ._request_handler_task .cancel ()
229229 self .write_error (ServiceUnavailable ("Response Timeout" ))
230230
231+ def keep_alive_time_left (self ):
232+ """
233+ Return keep alive time remaining, zero if no response written yet.
234+ """
235+ if self ._last_response_time and current_time :
236+ time_elapsed = current_time - self ._last_response_time
237+ return self .keep_alive_timeout - time_elapsed
238+ return 0
239+
231240 def keep_alive_timeout_callback (self ):
232241 """
233242 Check if elapsed time since last response exceeds our configured
@@ -236,9 +245,8 @@ def keep_alive_timeout_callback(self):
236245
237246 :return: None
238247 """
239- time_elapsed = current_time - self ._last_response_time
240- if time_elapsed < self .keep_alive_timeout :
241- time_left = self .keep_alive_timeout - time_elapsed
248+ time_left = self .keep_alive_time_left ()
249+ if time_left >= 0 :
242250 self ._keep_alive_timeout_handler = self .loop .call_later (
243251 time_left , self .keep_alive_timeout_callback
244252 )
@@ -431,10 +439,10 @@ def write_response(self, response):
431439 self .transport .close ()
432440 self .transport = None
433441 else :
442+ self ._last_response_time = current_time
434443 self ._keep_alive_timeout_handler = self .loop .call_later (
435444 self .keep_alive_timeout , self .keep_alive_timeout_callback
436445 )
437- self ._last_response_time = current_time
438446 self .cleanup ()
439447
440448 async def drain (self ):
@@ -483,10 +491,10 @@ async def stream_response(self, response):
483491 self .transport .close ()
484492 self .transport = None
485493 else :
494+ self ._last_response_time = current_time
486495 self ._keep_alive_timeout_handler = self .loop .call_later (
487496 self .keep_alive_timeout , self .keep_alive_timeout_callback
488497 )
489- self ._last_response_time = current_time
490498 self .cleanup ()
491499
492500 def write_error (self , exception ):
0 commit comments