26 lines
641 B
Python
26 lines
641 B
Python
import asyncio
|
|
import socket
|
|
from collections.abc import Iterable, AsyncIterator
|
|
from typing import NamedTuple
|
|
|
|
|
|
class Result(NamedTuple):
|
|
name: str
|
|
found: bool
|
|
|
|
|
|
async def probe(loop: asyncio.AbstractEventLoop, name: str) -> Result:
|
|
try:
|
|
await loop.getaddrinfo(name, None)
|
|
except socket.gaierror:
|
|
return Result(name, False)
|
|
return Result(name, True)
|
|
|
|
|
|
async def multi_probe(names: Iterable[str]) -> AsyncIterator[Result]:
|
|
loop = asyncio.get_running_loop()
|
|
coros = [probe(loop, name) for name in names]
|
|
for coro in asyncio.as_completed(coros):
|
|
result = await coro
|
|
yield result
|