Skip to content

Commit f27f985

Browse files
claws1st1
authored andcommitted
fix port value mismatch in create_server
1 parent dca023d commit f27f985

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

tests/test_tcp.py

+26
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,32 @@ def test_create_server_2(self):
131131
with self.assertRaisesRegex(ValueError, 'nor sock were specified'):
132132
self.loop.run_until_complete(self.loop.create_server(object))
133133

134+
def test_create_server_3(self):
135+
''' check ephemeral port can be used '''
136+
137+
async def start_server_ephemeral_ports():
138+
139+
for port_sentinel in [0, None]:
140+
srv = await self.loop.create_server(
141+
asyncio.Protocol,
142+
'127.0.0.1', port_sentinel,
143+
family=socket.AF_INET)
144+
145+
srv_socks = srv.sockets
146+
self.assertTrue(srv_socks)
147+
148+
host, port = srv_socks[0].getsockname()
149+
self.assertNotEqual(0, port)
150+
151+
self.loop.call_soon(srv.close)
152+
await srv.wait_closed()
153+
154+
# Check that the server cleaned-up proxy-sockets
155+
for srv_sock in srv_socks:
156+
self.assertEqual(srv_sock.fileno(), -1)
157+
158+
self.loop.run_until_complete(start_server_ephemeral_ports())
159+
134160
def test_create_connection_1(self):
135161
CNT = 0
136162
TOTAL_CNT = 100

uvloop/loop.pyx

+2
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,8 @@ cdef class Loop:
497497
int proto, int flags,
498498
int unpack):
499499

500+
if port is None:
501+
port = 0
500502
if isinstance(port, str):
501503
port = port.encode()
502504
elif isinstance(port, int):

0 commit comments

Comments
 (0)