Skip to content

Commit

Permalink
bpo-46827: pass sock.type to getaddrinfo in sock_connect (pythonGH-31499
Browse files Browse the repository at this point in the history
)

Co-authored-by: Thomas Grainger <tagrain@gmail.com>
Co-authored-by: blurb-it[bot] <43283697+blurb-it[bot]@users.noreply.github.com>
Co-authored-by: Andrew Svetlov <andrew.svetlov@gmail.com>
  • Loading branch information
3 people committed Feb 22, 2022
1 parent 38b5acf commit 8fb9489
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 1 deletion.
4 changes: 3 additions & 1 deletion Lib/asyncio/selector_events.py
Expand Up @@ -498,7 +498,9 @@ async def sock_connect(self, sock, address):

if not hasattr(socket, 'AF_UNIX') or sock.family != socket.AF_UNIX:
resolved = await self._ensure_resolved(
address, family=sock.family, proto=sock.proto, loop=self)
address, family=sock.family, type=sock.type, proto=sock.proto,
loop=self,
)
_, _, _, _, address = resolved[0]

fut = self.create_future()
Expand Down
18 changes: 18 additions & 0 deletions Lib/test/test_asyncio/test_selector_events.py
Expand Up @@ -151,6 +151,24 @@ def test_write_to_self_exception(self):
self.loop._csock.send.side_effect = RuntimeError()
self.assertRaises(RuntimeError, self.loop._write_to_self)

@mock.patch('socket.getaddrinfo')
def test_sock_connect_resolve_using_socket_params(self, m_gai):
addr = ('need-resolution.com', 8080)
for sock_type in [socket.SOCK_STREAM, socket.SOCK_DGRAM]:
with self.subTest(sock_type):
sock = test_utils.mock_nonblocking_socket(type=sock_type)

m_gai.side_effect = \
lambda *args: [(None, None, None, None, ('127.0.0.1', 0))]

con = self.loop.create_task(self.loop.sock_connect(sock, addr))
self.loop.run_until_complete(con)
m_gai.assert_called_with(
addr[0], addr[1], sock.family, sock.type, sock.proto, 0)

self.loop.run_until_complete(con)
sock.connect.assert_called_with(('127.0.0.1', 0))

def test_add_reader(self):
self.loop._selector.get_key.side_effect = KeyError
cb = lambda: True
Expand Down
@@ -0,0 +1 @@
Support UDP sockets in :meth:`asyncio.loop.sock_connect` for selector-based event loops. Patch by Thomas Grainger.

0 comments on commit 8fb9489

Please sign in to comment.