import asyncio, socket async def handle_client(reader, writer): request = None quit_msg_code = b'|<--eos-->|' while request != quit_msg_code: print('Receiving ans [ ... ]') request = (await reader.read(255)).decode('utf8') print('Receiving ans [ OK ] {}'.format(request)) response = str(request) + '\n' writer.write(response.encode('utf8')) try: await writer.drain() # Prevent closed connections without 'eos' except ConnectionResetError: print('Connection Closed') break print('Received \'eos\' signal, will now close session [ ... ]') writer.close() print('Session closed [ OK ]') loop = asyncio.get_event_loop() loop.create_task(asyncio.start_server(handle_client, 'localhost', 15555)) loop.run_forever()