]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Call sshfwd_unclean_close() in the event of a local socket error on a
authorSimon Tatham <anakin@pobox.com>
Mon, 23 Apr 2012 17:59:53 +0000 (17:59 +0000)
committerSimon Tatham <anakin@pobox.com>
Mon, 23 Apr 2012 17:59:53 +0000 (17:59 +0000)
forwarded X connection. (I somehow forgot to do this in r9364, despite
making the identical change in portfwd.c.)

[originally from svn r9470]
[r9364 == 49927f6c4dc619865ade72fabd0f659726bc0908]

x11fwd.c

index ba5bbf98746d7732bfa31276598788a411e53523..5b4f76cdcb0e95c0899b9e088dc4eff1dcd2c668 100644 (file)
--- 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;
 }