You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下Python socket.connect() IPv6卡顿63秒的原因及解决办法

问题原因
  • IPv6连接超时后回退IPv4的延迟:Windows默认优先尝试IPv6连接目标地址。当你的设备自动获取的IPv6地址无法连通https://foo.bar的IPv6服务端时,系统会等待IPv6连接超时(约60秒,和你遇到的63秒匹配),之后才会切换到IPv4连接,这就导致了整体请求的卡顿。
  • 本地IPv6链路或配置异常:虽然你的IPv6是自动获取,但可能存在本地IPv6路由配置错误、链路不通,或者目标服务器的IPv6服务在你的网络环境下无法正常访问(比如运营商IPv6链路质量差、防火墙拦截),而IPv4链路正常,所以禁用IPv6后直接走IPv4就没有延迟。
解决方法(启用IPv6且避免延迟)

方法一:让requests优先用IPv4

修改代码,强制requests在解析域名时优先选择IPv4地址,绕过系统的IPv6优先策略:

import json
import requests
import socket
from urllib3.util.connection import create_connection

def force_ipv4(host, port=None, **kwargs):
    # 只返回IPv4地址信息
    addrs = socket.getaddrinfo(host, port, socket.AF_INET, socket.SOCK_STREAM)
    return create_connection((addrs[0][4][0], port), **kwargs)

# 替换requests底层的连接创建逻辑
requests.adapters.HTTPAdapter.init_poolmanager = lambda self, *args, **kwargs: super(type(self), self).init_poolmanager(*args, **kwargs, connection_factory=force_ipv4)

response = requests.post(
    url="https://foo.bar/baz",
    headers={
        'Content-Type': "application/json",
        'Authorization': "bazz",
    },
    data=json.dumps({"key":"value"})
)

方法二:调整Windows的IPv4/IPv6优先级

修改系统网络配置,让IPv4的优先级高于IPv6,这样系统会先尝试IPv4连接:

  1. 以管理员身份打开命令提示符(CMD)
  2. 执行命令:netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 46 4
    • 该命令将IPv4映射地址的优先级设为46,高于默认的IPv6前缀优先级,系统会优先选择IPv4
  3. 若要恢复默认配置,执行:netsh interface ipv6 reset

方法三:排查修复本地IPv6网络问题

  • 检查IPv6地址有效性:在CMD执行ipconfig,查看以太网适配器下是否有全局单播IPv6地址(不是fe80开头的链路本地地址)
  • 测试目标IPv6连通性:执行ping -6 foo.bar,如果丢包或超时,说明你的网络到目标IPv6链路存在问题,可联系运营商排查或调整路由器IPv6配置

内容的提问来源于stack exchange,提问作者urig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:15:02