#!/usr/bin/python3 import asyncio class MyProtocol(asyncio.DatagramProtocol): def connection_made(self, transport): self.transport = transport async def _datagram_received(self, data, rqaddr): print('req from: @%s:%s' % (*rqaddr,)) loop = asyncio.get_running_loop() transport, protocol = await loop.create_datagram_endpoint(asyncio.DatagramProtocol, remote_addr=rqaddr) rsaddr = transport.get_extra_info('sockname') transport.close() print('rsp from: @%s:%s' % (*rsaddr,)) self.transport.sendto(data, rqaddr) def datagram_received(self, data, rqaddr): # ISSUE-2 asyncio.create_task(self._datagram_received(data, rqaddr)) async def main(): loop = asyncio.get_running_loop() transport, protocol = await loop.create_datagram_endpoint(MyProtocol, local_addr=('0.0.0.0', 9999)) # ISSUE-1 try: await loop.create_future() finally: transport.close() if __name__ == '__main__': try: asyncio.run(main()) except KeyboardInterrupt: pass