0

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

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

从客户端,输出是:

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

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

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

在 le P4 Connection with 之后p4.connect(),我运行一个p4.run_trust()命令,结果似乎还可以

信任已经建立

这个错误是在做一个p4 fetch, 的p4 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

非常感谢您的任何建议。

山姆斯塔福德建议的答案

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

4

1 回答 1

2

“对等方重置连接”是 TCP 错误。

“对等方重置连接”是什么意思?

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

于 2018-07-17T16:02:12.103 回答