r4946 bugfix: telnet gateway was throwing error if the last input command
authorAlexey Andriyanov <alan@al-an.info>
Wed, 1 Feb 2012 17:32:14 +0000 (17:32 +0000)
committerAlexey Andriyanov <alan@al-an.info>
Wed, 1 Feb 2012 17:32:14 +0000 (17:32 +0000)
was 'quit', 'exit' or something else which causes remote session interrupt.

gateways/telnet

index 13d87463ca6b47314b79c7884107b58b7a4fd094..9326c713b93d23b78fa39f81ab1b93fb84fa93e4 100755 (executable)
@@ -59,7 +59,18 @@ my $buff = '';
 my $nohang_read;
 until ($session->eof) {
        # read output from the device
-    $buff .= $session->get (Timeout => $nohang_read ? 0 : $op_timeout, Errmode => $nohang_read ? 'return' : 'die');
+    eval {
+               $buff .= $session->get (Timeout => $nohang_read ? 0 : $op_timeout, Errmode => $nohang_read ? 'return' : 'die');
+       };
+       if ($@) {
+               # check if there is something else in <STDIN>
+               if (defined <STDIN>) {
+                       die $@;
+               }
+               else {
+                       last; # no more input, seems like session was closed remotely by our last command
+               }
+       }
     $nohang_read = 0;
        print $1 if ($buff =~ s/(.*\n)//s);