P4 python 连接中断 SSL 错误

P4 python connection broken SSL error

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

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

从客户端,输出是:

SSL receive failed.\nread: Operation succeed : WSAECONNRESET

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

Connection from 90.XX.XX.93:53929 broken. SSL receive failed. read: Connection reset by peer: Connection reset by peer

在与 p4.connect() 进行 P4 连接后,我 运行 一个 p4.run_trust() 命令,结果似乎正常

Trust already established

此错误是在执行 p4 fetch、共 p4 edit myfile

时发现的

配置

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

当我执行 p4 info 时,会出现 "peer address",基本上我的 IP 具有随机生成的端口 (53929)。这个端口是什么?我是否需要设置固定端口并重定向到我的计算机 运行ing 脚本?

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

Python 3.5.4

PyOpenssl 18.0.0

P4Python 2017.2.1615960

非常感谢任何建议。

Sam Stafford 建议的答案

山姆是对的,看来我超时了。我在脚本启动时打开 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() 方法并在之后关闭它。而不是等待超时重新启动连接。

"Connection reset by peer" 是 TCP 错误。

What does "connection reset by peer" mean?

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