X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/bc06669bcf2c0d331e231d18c0e14023433f9e79..6f3370a03ed6393c049a13b78d2188135624beea:/x11fwd.c diff --git a/x11fwd.c b/x11fwd.c index ba5bbf98..5b4f76cd 100644 --- a/x11fwd.c +++ b/x11fwd.c @@ -503,16 +503,20 @@ static int x11_closing(Plug plug, const char *error_msg, int error_code, { struct X11Private *pr = (struct X11Private *) plug; - /* - * We have no way to communicate down the forwarded connection, - * so if an error occurred on the socket, we just ignore it - * and treat it like a proper close. - * - * FIXME: except we could initiate a full close here instead of - * just an outgoing EOF? ssh.c currently has no API for that, but - * it could. - */ - sshfwd_write_eof(pr->c); + if (error_msg) { + /* + * Socket error. Slam the connection instantly shut. + */ + sshfwd_unclean_close(pr->c); + } else { + /* + * Ordinary EOF received on socket. Send an EOF on the SSH + * channel. + */ + if (pr->c) + sshfwd_write_eof(pr->c); + } + return 1; }