diff --git a/aiodns/__init__.py b/aiodns/__init__.py index 2574514..85e1416 100644 --- a/aiodns/__init__.py +++ b/aiodns/__init__.py @@ -110,6 +110,12 @@ def gethostbyname(self, host: str, family: socket.AddressFamily) -> asyncio.Futu cb = functools.partial(self._callback, fut) self._channel.gethostbyname(host, family, cb) return fut + + def getaddrinfo(self, host: str, family: socket.AddressFamily = 0, port: Optional[int] = None, proto: int = 0, type: int = 0, flags: int = 0) -> asyncio.Future: + fut = asyncio.Future(loop=self.loop) # type: asyncio.Future + cb = functools.partial(self._callback, fut) + self._channel.getaddrinfo(host, port, cb, family=family, type=type, proto=proto, flags=flags) + return fut def gethostbyaddr(self, name: str) -> asyncio.Future: fut = asyncio.Future(loop=self.loop) # type: asyncio.Future diff --git a/tests.py b/tests.py index 635f7d0..7de75f6 100755 --- a/tests.py +++ b/tests.py @@ -151,6 +151,26 @@ def test_gethostbyname(self): result = self.loop.run_until_complete(f) self.assertTrue(result) + def test_getaddrinfo_address_family_0(self): + f = self.resolver.getaddrinfo('google.com') + result = self.loop.run_until_complete(f) + self.assertTrue(result) + self.assertTrue(len(result.nodes) > 1) + + def test_getaddrinfo_address_family_af_inet(self): + f = self.resolver.getaddrinfo('google.com', socket.AF_INET) + result = self.loop.run_until_complete(f) + self.assertTrue(result) + self.assertTrue(len(result.nodes) == 1) + self.assertTrue(result.nodes[0].family == socket.AF_INET) + + def test_getaddrinfo_address_family_af_inet6(self): + f = self.resolver.getaddrinfo('google.com', socket.AF_INET6) + result = self.loop.run_until_complete(f) + self.assertTrue(result) + self.assertTrue(len(result.nodes) == 1) + self.assertTrue(result.nodes[0].family == socket.AF_INET6) + @unittest.skipIf(sys.platform == 'win32', 'skipped on Windows') def test_gethostbyaddr(self): f = self.resolver.gethostbyaddr('127.0.0.1')