我已经在使用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*()
方法,然后在之后关闭它。无需等待超时即可重新启动连接。
答案 0 :(得分:2)
“对等方重置连接”是TCP错误。
What does "connection reset by peer" mean?
也许您的脚本保持打开状态的时间比P4V长,并且在此期间出现短暂的网络故障会导致连接重置?最好的解决方法可能是让脚本捕获错误,打开新的连接,然后从中断处开始提取。