Python Glossary English

Python 3.8+socketфункция

socket.has_dualstack_ipv6()

создание сокетов

Проверяет, умеет ли система один сокет IPv6, принимающий и IPv4-, и IPv6-подключения.

Синтаксис

socket.has_dualstack_ipv6() -> bool

Ответ зависит не от Python, а от ОС и её настроек: в контейнерах и на машинах с выключенным IPv6 он False, поэтому dualstack_ipv6=True без этой проверки падает ValueError. При двойном стеке IPv4-клиент виден в getpeername() как '::ffff:127.0.0.1', а не '127.0.0.1' — код, сравнивающий адреса строками, на этом ломается.

Примеры

import socket
print(socket.has_dualstack_ipv6())  # → ? True или False — зависит от системы
if socket.has_dualstack_ipv6():
    srv = socket.create_server(('', 0), family=socket.AF_INET6, dualstack_ipv6=True)
else:
    srv = socket.create_server(('', 0))
print(srv.family.name)  # → ? AF_INET6 или AF_INET
srv.close()

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности