hat.drivers.udp - User Datagram Protocol#

Asyncio wrapper for UDP communication.

class Address(typing.NamedTuple):
    host: str
    port: int

async def create(local_addr: typing.Optional[Address] = None,
                 remote_addr: typing.Optional[Address] = None,
                 queue_size: int = 0,
                 **kwargs
                 ) -> 'Endpoint': ...

class Endpoint(aio.Resource):

    @property
    def async_group(self) -> aio.Group: ...

    @property
    def empty(self) -> bool: ...

    def send(self,
             data: bytes,
             remote_addr: typing.Optional[Address] = None): ...

    async def receive(self) -> typing.Tuple[bytes, Address]: ...

Example usage:

addr = udp.Address('127.0.0.1', util.get_unused_udp_port())

# create two endpoints
ep1 = await udp.create(local_addr=addr)
ep2 = await udp.create(remote_addr=addr)

# send from ep2 to ep1
send_data = b'123'
ep2.send(send_data)
receive_data, ep2_addr = await ep1.receive()
assert send_data == receive_data
assert addr != ep2_addr

# send from ep1 to ep2
send_data = b'abc'
ep1.send(send_data, ep2_addr)
receive_data, ep1_addr = await ep2.receive()
assert send_data == receive_data
assert addr == ep1_addr

# close endpoints
await ep1.async_close()
await ep2.async_close()

API#

API reference is available as part of generated documentation: