+ my $err = $@;
+
+ eval { # cleanup
+
+ # switch back to blocking mode (else later shell commands will fail).
+ STDIN->blocking(1);
+
+ if ($web_socket->connected) {
+ # close connection
+ $websock_buffer .= "\x88" . pack('N', 0) . pack('n', 0); # Opcode, mask, statuscode
+ $full_write->($web_socket, $websock_buffer);
+ $websock_buffer = '';
+ close($web_socket);
+ }
+
+ # Reset the terminal parameters.
+ $output_buffer .= "\e[24H\r\n";
+ $full_write->(\*STDOUT, $output_buffer);
+ $output_buffer = '';
+
+ PVE::PTY::tcsetattr(*STDIN, $old_termios);
+ };
+ warn $@ if $@; # show cleanup errors