Skip to content

Commit cc33fbf

Browse files
committed
Add support for special hostname <broadcast>
1 parent 6c770dc commit cc33fbf

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

tests/test_udp.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,22 @@ def test_udp_sendto_dns(self):
378378
s_transport.close()
379379
self.loop.run_until_complete(asyncio.sleep(0.01))
380380

381+
def test_udp_sendto_broadcast(self):
382+
coro = self.loop.create_datagram_endpoint(
383+
asyncio.DatagramProtocol,
384+
local_addr=('127.0.0.1', 0),
385+
family=socket.AF_INET)
386+
387+
s_transport, server = self.loop.run_until_complete(coro)
388+
389+
try:
390+
s_transport.sendto(b'aaaa', ('<broadcast>', 80))
391+
except ValueError as exc:
392+
raise AssertionError('sendto raises {}.'.format(exc))
393+
394+
s_transport.close()
395+
self.loop.run_until_complete(asyncio.sleep(0.01))
396+
381397
def test_send_after_close(self):
382398
coro = self.loop.create_datagram_endpoint(
383399
asyncio.DatagramProtocol,

uvloop/dns.pyx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ cdef __convert_pyaddr_to_sockaddr(int family, object addr,
113113

114114
port = __port_to_int(port, None)
115115

116+
# resolve special hostname <broadcast> to the broadcast address
117+
if host == b'<broadcast>':
118+
host = b'255.255.255.255'
119+
116120
ret.addr_size = sizeof(system.sockaddr_in)
117121
err = uv.uv_ip4_addr(host, <int>port, <system.sockaddr_in*>&ret.addr)
118122
if err < 0:

0 commit comments

Comments
 (0)