[issue44886] asyncio: create_datagram_endpoint() does not return a DatagramTransport

Thomas Trummer report at bugs.python.org
Wed Aug 11 04:38:49 EDT 2021


New submission from Thomas Trummer <th.trummer at gmail.com>:

According to the documentation[1] loop.create_datagram_endpoint() returns an asyncio.DatagramTransport. However on Windows this is not the case when the ProactorEventLoop is used (which seems to be the default since Python 3.8). This is a problem because a DatagramProtocol subclass needs a downcast in order to satisfy the type system (or mypy for that matter).


[1] https://docs.python.org/3/library/asyncio-protocol.html#asyncio.DatagramTransport

---

# Will print: <class 'asyncio.proactor_events._ProactorDatagramTransport'> False

import asyncio


class EchoServerProtocol(asyncio.DatagramProtocol):
    def connection_made(self, transport):
        print(type(transport), isinstance(transport, asyncio.DatagramTransport))


async def main():
    transport, protocol = await asyncio.get_running_loop().create_datagram_endpoint(
        lambda: EchoServerProtocol(),
        local_addr=('127.0.0.1', 9999))

    try:
        await asyncio.sleep(5)
    finally:
        transport.close()


asyncio.run(main())

----------
components: asyncio
messages: 399376
nosy: Thomas Trummer, asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: asyncio: create_datagram_endpoint() does not return a DatagramTransport
versions: Python 3.8, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44886>
_______________________________________


More information about the Python-bugs-list mailing list