def test_datagram_protocol(self): f = mock.Mock() dp = asyncio.DatagramProtocol() self.assertIsNone(dp.connection_made(f)) self.assertIsNone(dp.connection_lost(f)) self.assertIsNone(dp.error_received(f)) self.assertIsNone(dp.datagram_received(f, f)) self.assertFalse(hasattr(dp, '__dict__'))
async def start(self, loop=None): loop = loop or compat.get_running_loop() await self._getaddrinfo(loop) self.transport, _ = await loop.create_datagram_endpoint( lambda: asyncio.DatagramProtocol(), family=socket.AF_INET, allow_broadcast=False, )
async def create_mdns_protocol() -> MDnsProtocol: """ Using a single socket works fine on Linux, but on OS X we need to use separate sockets for sending and receiving. """ loop = asyncio.get_event_loop() # sender tx_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) tx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if hasattr(socket, "SO_REUSEPORT"): tx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) tx_sock.bind(("", MDNS_PORT)) tx_transport, _ = await loop.create_datagram_endpoint( lambda: asyncio.DatagramProtocol(), sock=tx_sock, ) # receiver rx_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) rx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if hasattr(socket, "SO_REUSEPORT"): rx_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) rx_sock.setsockopt( socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(MDNS_ADDRESS) + b"\x00\x00\x00\x00", ) if sys.platform == "win32": rx_sock.bind(("", MDNS_PORT)) else: rx_sock.bind((MDNS_ADDRESS, MDNS_PORT)) _, protocol = await loop.create_datagram_endpoint( lambda: MDnsProtocol(tx_transport=cast(asyncio.DatagramTransport, tx_transport)), sock=rx_sock, ) return cast(MDnsProtocol, protocol)
async def async_main(): b4.udp_transport, b4.udp_protocol = await b4.loop.create_datagram_endpoint( lambda: asyncio.DatagramProtocol(), local_addr=('127.0.0.1', 8998), remote_addr=('127.0.0.1', 8999))