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

Python设置120秒连接超时仍20秒失败,如何解除Windows TCP限制?

解决方案:Windows下Python TCP连接超时受限问题

问题原因

Windows系统TCP栈的SYN重传机制默认会在约21秒后放弃连接尝试,这个超时是系统层面的,和你Python代码中设置的timeout参数无关——Python的timeout是连接成功后的读写超时,无法覆盖连接建立阶段的系统级超时。

Windows默认的SYN重传策略是:第一次发送SYN包后等待3秒,第二次等待6秒,第三次等待12秒,累计3+6+12=21秒后就会终止连接,抛出WinError 10060。

推荐解决方案:代码层面循环重试

最稳妥且不影响系统全局设置的方式,是在代码中主动循环尝试连接,直到达到你需要的总超时时间。

针对Socket连接的实现

import socket
import time

TARGET_HOST = "192.168.254.254"
TARGET_PORT = 1234
TOTAL_TIMEOUT = 120  # 总等待时长
RETRY_INTERVAL = 5   # 每次失败后重试间隔

start_time = time.time()
sock = None

while time.time() - start_time < TOTAL_TIMEOUT:
    try:
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(3)  # 单次连接尝试用短超时,避免不必要的等待
        sock.connect((TARGET_HOST, TARGET_PORT))
        print("设备连接成功")
        break
    except (socket.timeout, ConnectionRefusedError, TimeoutError):
        print(f"连接失败,{RETRY_INTERVAL}秒后重试...")
        time.sleep(RETRY_INTERVAL)
        if sock:
            sock.close()
else:
    raise TimeoutError(f"等待{TOTAL_TIMEOUT}秒后仍无法连接设备")

# 后续使用socket进行操作
# sock.send(...)

针对Web接口的实现

from urllib.request import urlopen
import time

TARGET_URL = "http://192.168.254.254"
TOTAL_TIMEOUT = 120  # 总等待时长
RETRY_INTERVAL = 5   # 每次失败后重试间隔

start_time = time.time()
response = None

while time.time() - start_time < TOTAL_TIMEOUT:
    try:
        response = urlopen(TARGET_URL, timeout=3)  # 单次请求短超时
        print("Web接口连接成功")
        break
    except (TimeoutError, ConnectionRefusedError):
        print(f"连接失败,{RETRY_INTERVAL}秒后重试...")
        time.sleep(RETRY_INTERVAL)
else:
    raise TimeoutError(f"等待{TOTAL_TIMEOUT}秒后仍无法访问设备Web接口")

# 后续处理响应
# content = response.read()

关于修改系统TCP超时的说明

如果一定要通过修改系统设置来延长连接建立超时,可以编辑Windows注册表,但不推荐,因为会影响全系统的TCP连接行为:

  1. 以管理员权限打开注册表编辑器(regedit)
  2. 定位到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 新建或修改DWORD类型的TcpMaxConnectRetransmissions值:
    • 默认值为3,对应总超时21秒
    • 修改为5时,重传间隔为3/6/12/24/48秒,总超时93秒,刚好覆盖你的90秒设备启动时间
  4. 修改后需要重启系统生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:20:22