diff --git a/src/ttynvt.c b/src/ttynvt.c index 532c85d..fce7bfc 100644 --- a/src/ttynvt.c +++ b/src/ttynvt.c @@ -400,7 +400,8 @@ static void _modem_status_cb(void *cctx, int status) if (status & TNS_STATE_CTS) mcr |= TIOCM_CTS; - tty->master_suspended = (mcr & TIOCM_CTS) ? 0 : 1; + if (tty->tio.c_cflag & CRTSCTS) + tty->master_suspended = (mcr & TIOCM_CTS) ? 0 : 1; DBG("%s: tty=%p mcr=%x MS=%d\n", __func__, tty, mcr, tty->master_suspended); @@ -799,9 +800,14 @@ ttynvt_ioctl(fuse_req_t req, int cmd, void *arg, if (tio->c_cflag & CRTSCTS) { - tty->cmcr |= TIOCM_RTS; + tty->master_suspended = (tty->smcr & TIOCM_CTS) ? 0 : 1; telnet_rfc2217_ctl(tty->tn, TNS_CTL_CTSRTS); } + else + { + tty->master_suspended = 0; + telnet_rfc2217_ctl(tty->tn, TNS_CTL_NOFLOW); + } if (!(tty->cmcr & TIOCM_DTR) && _tio_baud(tio) != 0) {