twisted(17.5.0)使用先前关闭的通道进行SSHConnection(ssh_CHANNEL_OPEN_CONFIRMATION)

时间:2017-07-05 15:57:22

标签: python-2.7 twisted twisted.conch

我在“持久”SSHConnection上使用SSHChannel。有时,先前关闭的localChannel将尝试使用并导致KeyError,因为localChannel不在SSHConnection.channels []中。

以下是一些日志摘要:

2017-07-05 07:54:50-0500 [-] openChannel localChannelID=2
2017-07-05 07:54:50-0500 [-] opening channel 2 with 65536 32768
2017-07-05 07:54:50-0500 [SSHChannel session (2) on SSHService 'ssh-connection' on ClientTransport,client] sending close 2
2017-07-05 07:54:50-0500 [SSHService 'ssh-connection' on ClientTransport,client] channelClosed id=2

所以现在频道2已关闭。之后(在几个新频道之后),我看到了:

2017-07-05 08:54:55-0500 [-] openChannel localChannelID=2
2017-07-05 08:54:55-0500 [-] opening channel 2 with 65536 32768
2017-07-05 08:54:55-0500 [SSHService 'ssh-connection' on ClientTransport,client] Unhandled Error Traceback (most recent call last):
<snipped irrelevant>
File "/usr/local/lib/python2.7/dist-packages/twisted/conch/ssh/connection.py", line 180, in ssh_CHANNEL_OPEN_CONFIRMATION channel = self.channels[localChannel]
exceptions.KeyError: 2

请注意,我在连接上有计时器,但在使用之前我重置了它们。

我迷失了,无法确定为什么它“大部分时间都在工作”但随后随机失败。如何进行测试以防止,因为它似乎打开而没有任何明显的错误。

1 个答案:

答案 0 :(得分:0)

在与那些提出要查看我的代码的扭曲的人交谈之后,我创建了一个最小的single-file.py应用程序来执行测试运行并且从未遇到过问题。观察者改变了现实?

然后我意识到应用程序中有几个线程在很久以前转向扭曲之前就存在了。他们从未以任何其他方式表现出来。

我删除了python线程,现在它在没有通道问题的情况下运行。 (作为旁注,我已经通过将延迟发送到我可以重新启动频道的点来克服频道问题,它可以正常工作,但我很乐意在代码中解决这个问题)< / p>