如何将 IPv4 和 IPv6 源地址绑定到 Python 套接字?
How to bind both IPv4 and IPv6 source address to Python socket?
我希望使用绑定到 IPv4 和 IPv6 地址的套接字创建 TCP 服务器。
有没有不创建 2 个套接字的方法?
您正在寻找的功能称为“双栈”,或 IPv4 + IPv6 双栈套接字。
从 Python 3.8 开始,您可以使用 socket.create_server()
.
轻松做到这一点
设置参数 dualstack_ipv6=True
将允许您在受支持的系统上使用同一套接字侦听 IPv4 和 IPv6 地址。
如果您想检查您的系统是否支持双栈套接字,请使用 socket.has_dualstack_ipv6()
。
来自 Python docs 的代码示例:
import socket
addr = ("", 8080) # all interfaces, port 8080
if socket.has_dualstack_ipv6():
s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
else:
s = socket.create_server(addr)
我希望使用绑定到 IPv4 和 IPv6 地址的套接字创建 TCP 服务器。
有没有不创建 2 个套接字的方法?
您正在寻找的功能称为“双栈”,或 IPv4 + IPv6 双栈套接字。
从 Python 3.8 开始,您可以使用 socket.create_server()
.
设置参数 dualstack_ipv6=True
将允许您在受支持的系统上使用同一套接字侦听 IPv4 和 IPv6 地址。
如果您想检查您的系统是否支持双栈套接字,请使用 socket.has_dualstack_ipv6()
。
来自 Python docs 的代码示例:
import socket addr = ("", 8080) # all interfaces, port 8080 if socket.has_dualstack_ipv6(): s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True) else: s = socket.create_server(addr)