【问题标题】:P4 python connection broken SSL errorP4 python连接断开SSL错误
【发布时间】:2018-07-18 22:16:53
【问题描述】:

我已经在使用P4V客户端,一切正常,没有连接错误。

错误: 当我尝试从 Python 执行 p4 命令时出现一些 SSL 错误。 而且是随机的,如果我重新运行脚本,每次都不会抛出错误

从客户端,输出是:

SSL 接收失败。\n读取:操作成功:WSAECONNRESET

从服务器端日志中,我得到了:

来自 90.XX.XX.93:53929 的连接中断。 SSL 接收失败。读: 对等方重置连接:对等方重置连接

在使用p4.connect() 进行 P4 连接后,我运行了p4.run_trust() 命令,结果似乎还可以

信任已经建立

这个错误是由于p4 fetchp4 edit myfile而导致的

配置

我正在从运行 P4V 客户端的同一台计算机上启动我的 python 脚本。我正在使用相同的配置(用户、工作区、url+port > ssl:p4.our-url.domain:1666)。无论是否启动 P4V 客户端,都会发生 SSL 错误。 SSL 证书是在 Perforce Server 安装和配置期间生成的。 我们的子域 p4.our-domain 后面没有 apache 服务器,所以我无法使用在线 SSL 检查器测试 SSL 证书(我的网络知识在那里达到了极限)

当我执行p4 info 时,有一个“对等地址”,基本上是我的 IP 和一个随机生成的端口 (53929)。这个端口是什么?我需要设置一个固定端口并重定向到我运行脚本的计算机吗?

您有任何想法该错误来自哪里吗?这是一个糟糕的服务器配置吗(奇怪的原因是办公室里的每个 p4v 客户端都可以工作)。 我是否需要为 P4Python 脚本的所有用户建立和分发新证书?

Python 3.5.4

PyOpenssl 18.0.0

P4Python 2017.2.1615960

非常感谢您的建议。

Sam Stafford 建议的回答

Sam 是对的,看来我超时了。我在脚本启动时打开 P4 连接并连接到服务器,然后在使用 p4 fetch/add/submit 之前启动处理以生成文件。这是在与服务器断开连接时重新连接的解决方法

# self.myp4 = P4() was created on init, files are added
submited = False
maxTry = 5
while not submited and maxTry > 0:
     try:
         reslist = self.p4.run_submit(ch)
     except P4Exception as p4e:
         print(str(self.p4.errors))
         self.myp4.disconnect()
         maxTry -= 1
         self.myp4.connect()

     submited = reslist is not None and len(reslist) > 0

如果您想保持连接打开,这很有效。我想避免超时的最好方法是在任何P4.run_*method*() 之前调用P4.connect() 方法并在之后关闭它。而不是等待超时重新启动连接。

【问题讨论】:

    标签: python python-3.x ssl perforce p4python


    【解决方案1】:

    "Connection reset by peer" 是 TCP 错误。

    What does "connection reset by peer" mean?

    也许您的脚本保持其连接打开的时间比 P4V 更长,并且在此期间的短暂网络故障导致连接被重置?最好的解决方法可能是让脚本捕获错误,打开一个新连接,然后从中断处继续。

    【讨论】:

    • 我已经看到了这个 TCP 错误,但我不知道这是同一个错误。我会尝试您的解决方案并回复您。谢谢
    • 我做了我的测试,你是对的,发现错误并重新连接解决了问题。我用代码和想法更新了我的问题。非常感谢!
    • 如您所见,在完成运行命令后关闭连接是理想的解决方法。如果每个客户端都保持打开而不使用的连接,您实际上可能会耗尽服务器上的套接字,因此一些管理员会将其网络配置为自动终止空闲连接。
    • 有趣的事实:P4V 曾经尽可能长时间地保持其连接打开,并最终被修复为在几秒钟内自动关闭它未使用的任何连接,以避免无意中 DDOS服务器。这是许多 p4 客户端开发人员在他们的第一个应用程序中犯的错误。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2014-07-18
    • 1970-01-01
    • 2012-11-18
    相关资源
    最近更新 更多