From 9340a0af5e31d84a5133e7be89e4579e586af3d5 Mon Sep 17 00:00:00 2001 From: Till Wimmer Date: Mon, 1 Apr 2019 13:26:08 +0200 Subject: [PATCH] connector: Stop socket-to-channel EOF flooding Signed-off-by: Till Wimmer Reviewed-by: Andreas Schneider Reviewed-by: Jakub Jelen --- src/connector.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/connector.c b/src/connector.c index 0062785c..ac841338 100644 --- a/src/connector.c +++ b/src/connector.c @@ -267,8 +267,13 @@ static void ssh_connector_fd_in_cb(ssh_connector connector) if (connector->out_channel != NULL) { if (r == 0) { - rc = ssh_channel_send_eof(connector->out_channel); - (void)rc; /* TODO Handle rc? */ + SSH_LOG(SSH_LOG_TRACE, "input fd %d is EOF", connector->in_fd); + if (connector->out_channel->local_eof == 0) { + rc = ssh_channel_send_eof(connector->out_channel); + (void)rc; /* TODO Handle rc? */ + } + connector->in_available = 1; /* Don't poll on it */ + return; } else if (r> 0) { /* loop around ssh_channel_write in case our window reduced due to a race */ while (total != r){ @@ -289,7 +294,7 @@ static void ssh_connector_fd_in_cb(ssh_connector connector) } } else if (connector->out_fd != SSH_INVALID_SOCKET) { if (r == 0){ - close (connector->out_fd); + close(connector->out_fd); connector->out_fd = SSH_INVALID_SOCKET; } else { /*