X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/9c964e8579f6597d1bfdacd6dcf8d531bfece511..0d694692c59504838ec2043ddfe670b3a9247faf:/x11fwd.c diff --git a/x11fwd.c b/x11fwd.c index c537f2da..d0a1f997 100644 --- a/x11fwd.c +++ b/x11fwd.c @@ -106,6 +106,14 @@ static int x11_verify(char *proto, unsigned char *data, int dlen) { static int x11_receive (Socket s, int urgent, char *data, int len) { struct X11Private *pr = (struct X11Private *)sk_get_private_ptr(s); + if (urgent==3) { + /* + * A socket error has occurred. We have no way to + * communicate this down the forwarded connection, so we'll + * just treat it like a proper close. + */ + len = 0; + } if (!len) { /* Connection has closed. */ sshfwd_close(pr->c); @@ -121,13 +129,11 @@ static int x11_receive (Socket s, int urgent, char *data, int len) { * * Returns an error message, or NULL on success. * also, fills the SocketsStructure - * - * Also places the canonical host name into `realhost'. */ -char *x11_init (Socket *s, char *display, void *c, char **realhost) { +char *x11_init (Socket *s, char *display, void *c) { SockAddr addr; int port; - char *err; + char *err, *dummy_realhost; char host[128]; int n, displaynum; struct X11Private *pr; @@ -148,7 +154,7 @@ char *x11_init (Socket *s, char *display, void *c, char **realhost) { /* * Try to find host. */ - addr = sk_namelookup(host, realhost); + addr = sk_namelookup(host, &dummy_realhost); if ( (err = sk_addr_error(addr)) ) return err; @@ -157,7 +163,7 @@ char *x11_init (Socket *s, char *display, void *c, char **realhost) { /* * Open socket. */ - *s = sk_new(addr, port, 0, x11_receive); + *s = sk_new(addr, port, 0, 1, x11_receive); if ( (err = sk_socket_error(*s)) ) return err;