| 28 | |
| 29 | |
| 30 | def get_local_addr(transport: asyncio.Transport) -> tuple[str, int | None] | None: |
| 31 | socket_info: socket.socket | None = transport.get_extra_info("socket") |
| 32 | if socket_info is not None: |
| 33 | info = socket_info.getsockname() |
| 34 | if isinstance(info, tuple): |
| 35 | return (str(info[0]), int(info[1])) |
| 36 | if isinstance(info, str): |
| 37 | return (info, None) |
| 38 | return None |
| 39 | info = transport.get_extra_info("sockname") |
| 40 | if info is not None and isinstance(info, list | tuple) and len(info) == 2: |
| 41 | return (str(info[0]), int(info[1])) |
| 42 | if isinstance(info, str): |
| 43 | return (info, None) |
| 44 | return None |
| 45 | |
| 46 | |
| 47 | def is_ssl(transport: asyncio.Transport) -> bool: |