static void option_side_effects(struct Opt *o, int enabled) {
if (o->option == TELOPT_ECHO && o->send == DO)
echoing = !enabled;
- else if (o->option = TELOPT_SGA && o->send == DO)
+ else if (o->option == TELOPT_SGA && o->send == DO)
editing = !enabled;
ldisc_send(NULL, 0); /* cause ldisc to notice the change */
}
static int telnet_receive(Socket skt, int urgent, char *data, int len) {
if (urgent==3) {
/* A socket error has occurred. */
+ sk_close(s);
s = NULL;
connection_fatal(data);
- len = 0;
- }
- if (!len) {
+ return 0;
+ } else if (!len) {
/* Connection has closed. */
sk_close(s);
s = NULL;
return 0;
}
+ if(urgent) in_synch = TRUE;
do_telnet_read (data, len);
return 1;
}
/*
* Open socket.
*/
- s = sk_new(addr, port, 0, telnet_receive);
+ s = sk_new(addr, port, 0, 1, telnet_receive);
if ( (err = sk_socket_error(s)) )
return err;