Commit 98d15a16 authored by Victor Stinner's avatar Victor Stinner

asyncio doc: use server.wait_closed() in TCP echo server example

parent 61669951
...@@ -473,6 +473,7 @@ having to write a short coroutine to handle the exception and stop the ...@@ -473,6 +473,7 @@ having to write a short coroutine to handle the exception and stop the
running loop. At :meth:`~BaseEventLoop.run_until_complete` exit, the loop is running loop. At :meth:`~BaseEventLoop.run_until_complete` exit, the loop is
no longer running, so there is no need to stop the loop in case of an error. no longer running, so there is no need to stop the loop in case of an error.
TCP echo server TCP echo server
--------------- ---------------
...@@ -483,28 +484,34 @@ TCP echo server example, send back received data and close the connection:: ...@@ -483,28 +484,34 @@ TCP echo server example, send back received data and close the connection::
class EchoServer(asyncio.Protocol): class EchoServer(asyncio.Protocol):
def connection_made(self, transport): def connection_made(self, transport):
peername = transport.get_extra_info('peername') peername = transport.get_extra_info('peername')
print('connection from {}'.format(peername)) print('Connection from {}'.format(peername))
self.transport = transport self.transport = transport
def data_received(self, data): def data_received(self, data):
print('data received: {}'.format(data.decode())) message = data.decode()
print('Data received: {!r}'.format(message))
print('Send: {!r}'.format(message))
self.transport.write(data) self.transport.write(data)
# close the socket print('Close the socket')
self.transport.close() self.transport.close()
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
coro = loop.create_server(EchoServer, '127.0.0.1', 8888) coro = loop.create_server(EchoServer, '127.0.0.1', 8888)
server = loop.run_until_complete(coro) server = loop.run_until_complete(coro)
print('serving on {}'.format(server.sockets[0].getsockname()))
# Server requests until CTRL+c is pressed
print('Serving on {}'.format(server.sockets[0].getsockname()))
try: try:
loop.run_forever() loop.run_forever()
except KeyboardInterrupt: except KeyboardInterrupt:
print("exit") print("exit")
finally:
server.close() # Close the server
loop.close() server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
:meth:`Transport.close` can be called immediately after :meth:`Transport.close` can be called immediately after
:meth:`WriteTransport.write` even if data are not sent yet on the socket: both :meth:`WriteTransport.write` even if data are not sent yet on the socket: both
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment