@@ -534,6 +534,7 @@ def __init__(
534534
535535 # asyncio future that will be done once server has started
536536 self .serving = asyncio .Future ()
537+ self .serving_done = asyncio .Future ()
537538 # constructors cannot be declared async, so we have to
538539 # defer the initialization of the server
539540 self .server = None
@@ -552,13 +553,15 @@ async def serve_forever(self):
552553 Log .info ("Server(Unix) listening." )
553554 await self .server .serve_forever ()
554555 except asyncio .exceptions .CancelledError :
556+ self .serving_done .set_result (True )
555557 raise
556558 except Exception as exc : # pylint: disable=broad-except
557559 Log .error ("Server unexpected exception {}" , exc )
558560 else :
559561 raise RuntimeError (
560562 "Can't call serve_forever on an already running server object"
561563 )
564+ self .serving_done .set_result (True )
562565 Log .info ("Server graceful shutdown." )
563566
564567 async def shutdown (self ):
@@ -641,6 +644,7 @@ def __init__(
641644
642645 # asyncio future that will be done once server has started
643646 self .serving = asyncio .Future ()
647+ self .serving_done = asyncio .Future ()
644648 # constructors cannot be declared async, so we have to
645649 # defer the initialization of the server
646650 self .server = None
@@ -663,13 +667,15 @@ async def serve_forever(self):
663667 try :
664668 await self .server .serve_forever ()
665669 except asyncio .exceptions .CancelledError :
670+ self .serving_done .set_result (False )
666671 raise
667672 except Exception as exc : # pylint: disable=broad-except
668673 Log .error ("Server unexpected exception {}" , exc )
669674 else :
670675 raise RuntimeError (
671676 "Can't call serve_forever on an already running server object"
672677 )
678+ self .serving_done .set_result (True )
673679 Log .info ("Server graceful shutdown." )
674680
675681 async def shutdown (self ):
@@ -821,6 +827,7 @@ def __init__(
821827 self .stop_serving = self .loop .create_future ()
822828 # asyncio future that will be done once server has started
823829 self .serving = asyncio .Future ()
830+ self .serving_done = asyncio .Future ()
824831 self .factory_parms = {
825832 "local_addr" : self .address ,
826833 "allow_broadcast" : True ,
@@ -836,9 +843,11 @@ async def serve_forever(self):
836843 ** self .factory_parms ,
837844 )
838845 except asyncio .exceptions .CancelledError :
846+ self .serving_done .set_result (False )
839847 raise
840848 except Exception as exc :
841849 Log .error ("Server unexpected exception {}" , exc )
850+ self .serving_done .set_result (False )
842851 raise RuntimeError (exc ) from exc
843852 Log .info ("Server(UDP) listening." )
844853 self .serving .set_result (True )
@@ -847,6 +856,7 @@ async def serve_forever(self):
847856 raise RuntimeError (
848857 "Can't call serve_forever on an already running server object"
849858 )
859+ self .serving_done .set_result (True )
850860
851861 async def shutdown (self ):
852862 """Shutdown server."""
0 commit comments