P4 python连接中断SSL错误

时间:2018-07-17 12:23:37

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

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

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

从客户端输出为:

  

SSL接收失败。\ nread:操作成功:WSAECONNRESET

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

  

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

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

  

信任已建立

执行p4 fetch中的p4 edit myfile时,该错误就消失了

配置

我正在从运行P4V客户端的同一台计算机上启动python脚本。我正在使用相同的配置(用户,工作空间,URL +端口> 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提取/添加/提交之前启动了处理以生成文件。这是在与服务器断开连接的情况下重新连接的解决方法

# 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()之前调用P4.run_*method*()方法,然后在之后关闭它。无需等待超时即可重新启动连接。

1 个答案:

答案 0 :(得分:2)

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

What does "connection reset by peer" mean?

也许您的脚本保持打开状态的时间比P4V长,并且在此期间出现短暂的网络故障会导致连接重置?最好的解决方法可能是让脚本捕获错误,打开新的连接,然后从中断处开始提取。