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);
*
* 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;
/*
* Try to find host.
*/
- addr = sk_namelookup(host, realhost);
+ addr = sk_namelookup(host, &dummy_realhost);
if ( (err = sk_addr_error(addr)) )
return err;
/*
* 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;