如何将 IPv4 和 IPv6 源地址绑定到 Python 套接字?

Bha*_*rel 3 python sockets tcp ipv6

我希望使用套接字创建一个绑定到 IPv4 和 IPv6 地址的 TCP 服务器。

有没有办法在不创建 2 个套接字的情况下做到这一点?

Bha*_*rel 5

您正在寻找的功能称为“双栈”,或 IPv4 + IPv6 双栈套接字。

从 Python 3.8 开始,您可以使用socket.create_server().

设置该参数dualstack_ipv6=True将允许您在支持的系统上使用同一套接字侦听 IPv4 和 IPv6 地址。

如果您想检查您的系统是否支持双栈套接字,请使用socket.has_dualstack_ipv6()

Python 文档中的代码示例:

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)
Run Code Online (Sandbox Code Playgroud)