]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
asyncio: Use socket specs for getaddrinfo() in sock_connect()
authorYury Selivanov <yury@magic.io>
Tue, 28 Jun 2016 15:00:22 +0000 (11:00 -0400)
committerYury Selivanov <yury@magic.io>
Tue, 28 Jun 2016 15:00:22 +0000 (11:00 -0400)
Patch by Martin Richard.  GH PR #365.

Lib/asyncio/selector_events.py
Lib/test/test_asyncio/test_selector_events.py

index 9564d01dfa66f77595ff1ba98ac6a7a52ea531fe..ed2b4d756feddec5a4b8846ff8f0e9d8a23ccc36 100644 (file)
@@ -394,7 +394,8 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
         if hasattr(socket, 'AF_UNIX') and sock.family == socket.AF_UNIX:
             self._sock_connect(fut, sock, address)
         else:
-            resolved = base_events._ensure_resolved(address, loop=self)
+            resolved = base_events._ensure_resolved(
+                address, family=sock.family, proto=sock.proto, loop=self)
             resolved.add_done_callback(
                 lambda resolved: self._on_resolved(fut, sock, resolved))
 
index 5dc6ff8e66d6bab3be4df05d6033b3ac22370f37..ff71c218bb1659909aa1fc2b928ddb2c033a508c 100644 (file)
@@ -373,6 +373,17 @@ class BaseSelectorEventLoopTests(test_utils.TestCase):
             self.loop.run_until_complete(fut)
         self.assertTrue(self.loop.remove_writer.called)
 
+    def test_sock_connect_resolve_using_socket_params(self):
+        addr = ('need-resolution.com', 8080)
+        sock = test_utils.mock_nonblocking_socket()
+        self.loop.getaddrinfo = mock.Mock()
+        self.loop.sock_connect(sock, addr)
+        while not self.loop.getaddrinfo.called:
+            self.loop._run_once()
+        self.loop.getaddrinfo.assert_called_with(
+            *addr, type=sock.type, family=sock.family, proto=sock.proto,
+            flags=0)
+
     def test__sock_connect(self):
         f = asyncio.Future(loop=self.loop)