Skip to content

Commit 45e1775

Browse files
committed
Fix create_datagram_endpoint to work with AF_INET6 and no local_addr
A fix for #98.
1 parent 490c410 commit 45e1775

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

tests/test_udp.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,24 @@ def datagram_received(self, data, addr):
9797
server.transport.close()
9898
self.loop.run_until_complete(server.done)
9999

100+
def test_create_datagram_endpoint_ipv6_family(self):
101+
class TestMyDatagramProto(MyDatagramProto):
102+
def __init__(inner_self):
103+
super().__init__(loop=self.loop)
104+
105+
def datagram_received(self, data, addr):
106+
super().datagram_received(data, addr)
107+
self.transport.sendto(b'resp:' + data, addr)
108+
109+
coro = self.loop.create_datagram_endpoint(
110+
TestMyDatagramProto, local_addr=None, family=socket.AF_INET6)
111+
s_transport = None
112+
try:
113+
s_transport, server = self.loop.run_until_complete(coro)
114+
finally:
115+
if s_transport:
116+
s_transport.close()
117+
100118
def test_create_datagram_endpoint_sock(self):
101119
sock = None
102120
local_address = ('127.0.0.1', 0)

uvloop/loop.pyx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2433,7 +2433,10 @@ cdef class Loop:
24332433
self._sock_set_reuseport(udp._fileno())
24342434

24352435
socket = udp._get_socket()
2436-
socket.bind(('0.0.0.0', 0))
2436+
if family == uv.AF_INET6:
2437+
socket.bind(('::', 0))
2438+
else:
2439+
socket.bind(('0.0.0.0', 0))
24372440
else:
24382441
lai = (<AddrInfo>lads).data
24392442
while lai is not NULL:

0 commit comments

Comments
 (0)