diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c
index 46446c80d9763234e3862584be0f4eb9c4a831d7..4e7c96ed49c28582670f1434888710257993e762 100644
--- a/src/sbbs3/sexyz.c
+++ b/src/sbbs3/sexyz.c
@@ -928,7 +928,7 @@ static int receive_files(char** fname_list, int fnames)
 	outbuf.highwater_mark=0;	/* don't delay ACK/NAK transmits */
 
 	/* Purge input buffer */
-	while((i=recv_byte(NULL,0))!=NOINP)
+	while(is_connected(NULL) && (i=recv_byte(NULL,0))!=NOINP)
 		lprintf(LOG_WARNING,"Throwing out received: %s",chr((uchar)i));
 
 	while(is_connected(NULL)) {
diff --git a/src/sbbs3/xmodem.c b/src/sbbs3/xmodem.c
index 242b69a114244f5e2295c41df2e3085afc2787ff..eb82bbbfe1ad3b604248107c9ea1d07c8c6f7298 100644
--- a/src/sbbs3/xmodem.c
+++ b/src/sbbs3/xmodem.c
@@ -98,14 +98,14 @@ static char *chr(uchar ch)
 
 int xmodem_put_ack(xmodem_t* xm)
 {
-	while(getcom(0)!=NOINP)
+	while(getcom(0)!=NOINP && is_connected(xm))
 		;				/* wait for any trailing data */
 	return putcom(ACK);
 }
 
 int xmodem_put_nak(xmodem_t* xm, unsigned block_num)
 {
-	while(getcom(0)!=NOINP)
+	while(getcom(0)!=NOINP && is_connected(xm))
 		;				/* wait for any trailing data */
 
 	if(block_num<=1) {
@@ -191,18 +191,15 @@ int xmodem_get_block(xmodem_t* xm, uchar* block, unsigned expected_block_num)
 					return(EOT);
 				return(NOINP);
 		}
-		i=getcom(xm->byte_timeout);
-		if(i==NOINP)
+		if((i=getcom(xm->byte_timeout))==NOINP)
 			break; 
 		block_num=i;
-		i=getcom(xm->byte_timeout);
-		if(i==NOINP)
+		if((i=getcom(xm->byte_timeout))==NOINP)
 			break; 
 		block_inv=i;
 		calc_crc=calc_chksum=0;
 		for(b=0;b<xm->block_size && is_connected(xm);b++) {
-			i=getcom(xm->byte_timeout);
-			if(i==NOINP)
+			if((i=getcom(xm->byte_timeout))==NOINP)
 				break;
 			block[b]=i;
 			if((*xm->mode)&CRC)
@@ -394,7 +391,7 @@ BOOL xmodem_put_eot(xmodem_t* xm)
 
 		lprintf(xm,LOG_INFO,"Sending End-of-Text (EOT) indicator (%d)",errors+1);
 
-		while((ch=getcom(0))!=NOINP)
+		while((ch=getcom(0))!=NOINP && is_connected(xm))
 			lprintf(xm,LOG_INFO,"Throwing out received: %s",chr((uchar)ch));
 
 		putcom(EOT);
diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c
index d8e56450d0db8fee61e62b2ed9d9d2dfea5316cd..3e518809f26f37457bd01015e71bc6bf411e2103 100644
--- a/src/sbbs3/zmodem.c
+++ b/src/sbbs3/zmodem.c
@@ -1565,7 +1565,7 @@ int zmodem_recv_init(zmodem_t* zm
 
 	lprintf(zm,LOG_DEBUG,"zmodem_recv_init");
 
-	while(!zm->cancelled && (ch=zm->recv_byte(zm,0))!=NOINP)
+	while(is_connected(zm) && !zm->cancelled && (ch=zm->recv_byte(zm,0))!=NOINP)
 		lprintf(zm,LOG_DEBUG,"Throwing out received: %s",chr((uchar)ch));
 
 	for(errors=0; errors<=zm->max_errors && !zm->cancelled && is_connected(zm); errors++) {