diff -up netkit-telnet-0.17/telnet/sys_bsd.c.errnosysbsd netkit-telnet-0.17/telnet/sys_bsd.c
--- netkit-telnet-0.17/telnet/sys_bsd.c.errnosysbsd 2007-09-20 10:57:58.000000000 +0200
+++ netkit-telnet-0.17/telnet/sys_bsd.c 2007-09-20 11:10:08.000000000 +0200
@@ -375,6 +375,7 @@ TerminalNewMode(int f)
int onoff;
int old;
cc_t esc;
+ int err;
globalmode = f&~MODE_FORCE;
if (prevmode == f)
@@ -407,6 +408,12 @@ TerminalNewMode(int f)
tcsetattr(tin, TCSADRAIN, &tmp_tc);
#endif /* USE_TERMIO */
old = ttyflush(SYNCHing|flushout);
+ if (old < 0) {
+ err = errno;
+ if (! ((err == EINTR) || (err == EAGAIN) || (err == ENOSPC))) {
+ break;
+ }
} while (old < 0 || old > 1);
}