2017-07-05 25 views
0

我使用SSHChannel通過「持久性」SSHConnection。偶爾,以前關閉的localChannel將嘗試使用並導致KeyError,因爲localChannel不在SSHConnection.channels []中。twisted(17.5.0)SSHConnection使用先前關閉的通道(ssh_CHANNEL_OPEN_CONFIRMATION)

下面是一些日誌片段:

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 

請注意,我對連接定時器,但我在使用之前重置這些。

我迷路了,無法確定它爲什麼「大部分時間」工作,但隨後失敗。我如何測試以防止因爲它似乎打開沒有任何明顯的錯誤。

回答

0

在與提供查看我的代碼的扭曲的人交談之後,我做了一個最小的single-file.py應用程序來執行測試運行並從未發生過這個問題。觀察者改變了現實?

然後我意識到應用程序中有幾個線程在很久之前就已經出現了。他們從來沒有以其他方式表現出來。

我刪除了python線程,現在它運行時沒有通道問題。 (作爲一個方面說明,我已經通過發送延遲到可以重新啓動通道的時間點來解決通道問題,並且它會工作,但我很高興能夠在代碼中執行此操作)