[JSch-users] SOLVED: SCP will not exit, "session down" error, SSH_MSG_DISCONNECT: 2 Received ieof fo
Status: Alpha
Brought to you by:
ymnk
From: Manuel B. <man...@gm...> - 2005-06-19 16:35:20
|
Hi I've encountered many problems when using SCP (copy from and to remote site, creating directories). Sometimes the program would hang after it had finished copying, sometimes I got a "session down" exception, sometimes it just worked fine. As the root of the problems I have identified the following issues: Channel.eof() sent an EOF message even if the channel had already been closed. This in turn resulted in an error from the remote site, which caused an exception: com.jcraft.jsch.JSchException: SSH_MSG_DISCONNECT: 2 Received ieof for nonexistent channel 0. The exception was quietly eaten without any error handling. Additionally, I have removed all two calls of System.gc() because this is simply not acceptable for many applications, in particular not for a J2EE application. Thus, I've made the following modifications to Channel.java and Session.java (against jsch-0.1.20): Channel.java: 231d230 < if (!close) { 243d241 < } Session.java: 212c212 < //System.gc(); --- > System.gc(); 942d941 < Exception exception = null; 1192,1193d1190 < if (socket == null || !socket.isClosed()) < exception = e; 1209,1210d1205 < if (exception != null) < throw new RuntimeException(exception); 1268c1263 < // System.gc(); --- > System.gc(); This is a rather simple fix. I think it might be even better to remove most of the calls of Channel.eof(). I don't think they're necessary after every read failure. Session.run() will now throw an exception if something goes wrong. In many cases, this should help uncover the real cause of a problem. I hope these modifications can be incorporated into the next release of Jsch. Regards Manuel |