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Сообщить о неточности