version 1.74, 2001/05/31 10:30:15 |
version 1.75, 2001/06/04 23:07:20 |
|
|
* because this is updated in a signal handler. |
* because this is updated in a signal handler. |
*/ |
*/ |
static volatile int received_window_change_signal = 0; |
static volatile int received_window_change_signal = 0; |
|
static volatile int received_signal = 0; |
|
|
/* Flag indicating whether the user\'s terminal is in non-blocking mode. */ |
/* Flag indicating whether the user\'s terminal is in non-blocking mode. */ |
static int in_non_blocking_mode = 0; |
static int in_non_blocking_mode = 0; |
|
|
void |
void |
signal_handler(int sig) |
signal_handler(int sig) |
{ |
{ |
if (in_raw_mode()) |
received_signal = sig; |
leave_raw_mode(); |
quit_pending = 1; |
if (in_non_blocking_mode) |
|
leave_non_blocking(); |
|
channel_stop_listening(); |
|
packet_close(); |
|
fatal("Killed by signal %d.", sig); |
|
} |
} |
|
|
/* |
/* |
|
|
/* Stop listening for connections. */ |
/* Stop listening for connections. */ |
channel_stop_listening(); |
channel_stop_listening(); |
|
|
/* |
if (have_pty) |
* In interactive mode (with pseudo tty) display a message indicating |
leave_raw_mode(); |
* that the connection has been closed. |
|
*/ |
|
if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) { |
|
snprintf(buf, sizeof buf, "Connection to %.64s closed.\r\n", host); |
|
buffer_append(&stderr_buffer, buf, strlen(buf)); |
|
} |
|
|
|
/* restore blocking io */ |
/* restore blocking io */ |
if (!isatty(fileno(stdin))) |
if (!isatty(fileno(stdin))) |
|
|
if (!isatty(fileno(stderr))) |
if (!isatty(fileno(stderr))) |
unset_nonblock(fileno(stderr)); |
unset_nonblock(fileno(stderr)); |
|
|
|
if (received_signal) { |
|
if (in_non_blocking_mode) /* XXX */ |
|
leave_non_blocking(); |
|
fatal("Killed by signal %d.", received_signal); |
|
} |
|
|
|
/* |
|
* In interactive mode (with pseudo tty) display a message indicating |
|
* that the connection has been closed. |
|
*/ |
|
if (have_pty && options.log_level != SYSLOG_LEVEL_QUIET) { |
|
snprintf(buf, sizeof buf, "Connection to %.64s closed.\r\n", host); |
|
buffer_append(&stderr_buffer, buf, strlen(buf)); |
|
} |
|
|
/* Output any buffered data for stdout. */ |
/* Output any buffered data for stdout. */ |
while (buffer_len(&stdout_buffer) > 0) { |
while (buffer_len(&stdout_buffer) > 0) { |
len = write(fileno(stdout), buffer_ptr(&stdout_buffer), |
len = write(fileno(stdout), buffer_ptr(&stdout_buffer), |
|
|
buffer_consume(&stderr_buffer, len); |
buffer_consume(&stderr_buffer, len); |
stderr_bytes += len; |
stderr_bytes += len; |
} |
} |
|
|
if (have_pty) |
|
leave_raw_mode(); |
|
|
|
/* Clear and free any buffers. */ |
/* Clear and free any buffers. */ |
memset(buf, 0, sizeof(buf)); |
memset(buf, 0, sizeof(buf)); |