#include <stdio.h>
#include <stdlib.h>
+#include <limits.h>
#include <ctype.h>
#include "putty.h"
/* the above field _must_ be first in the structure */
Socket s;
+ int closed_on_socket_error;
int bufsize;
int firstbyte;
int cansize;
if (rlogin->s) {
sk_close(rlogin->s);
rlogin->s = NULL;
+ if (error_msg)
+ rlogin->closed_on_socket_error = TRUE;
notify_remote_exit(rlogin->frontend);
}
if (error_msg) {
rlogin = snew(struct rlogin_tag);
rlogin->fn = &fn_table;
rlogin->s = NULL;
+ rlogin->closed_on_socket_error = FALSE;
rlogin->frontend = frontend_handle;
rlogin->term_width = conf_get_int(conf, CONF_width);
rlogin->term_height = conf_get_int(conf, CONF_height);
* in which case we prompt for it and may end up deferring doing
* anything else until the local prompt mechanism returns.
*/
- if ((ruser = get_remote_username(conf)) == NULL) {
+ if ((ruser = get_remote_username(conf)) != NULL) {
rlogin_startup(rlogin, ruser);
sfree(ruser);
} else {
Rlogin rlogin = (Rlogin) handle;
if (rlogin->s != NULL)
return -1; /* still connected */
+ else if (rlogin->closed_on_socket_error)
+ return INT_MAX; /* a socket error counts as an unclean exit */
else
/* If we ever implement RSH, we'll probably need to do this properly */
return 0;