diff --git a/src/sbbs3/download.cpp b/src/sbbs3/download.cpp
index d3a53c187cb9d9322a92efe3ebe7799869afe37f..bfbcc236e8ca6d7bc206e7568da2a3e7de321d18 100644
--- a/src/sbbs3/download.cpp
+++ b/src/sbbs3/download.cpp
@@ -191,7 +191,12 @@ int sbbs_t::protocol(char *cmdline, int cd)
 	sprintf(msg,"Transferring %s",cmdline);
 	spymsg(msg);
 	sys_status|=SS_FILEXFER;
-	i=external(cmdline,EX_OUTL,p);
+	i=external(cmdline
+		,EX_OUTL
+#ifdef __unix__		/* file xfer progs use stdio on Unix */
+		|EX_INR|EX_OUTR
+#endif
+		,p);
 	sys_status&=~SS_FILEXFER;
 	if(online==ON_REMOTE)
 		rioctl(IOFB);
diff --git a/src/sbbs3/execmisc.cpp b/src/sbbs3/execmisc.cpp
index f9476d0781e5e411c5b8a566f023d25668ef672b..f1b3ddd5100c65cb6de030f6dea3078ae465b9d5 100644
--- a/src/sbbs3/execmisc.cpp
+++ b/src/sbbs3/execmisc.cpp
@@ -965,7 +965,11 @@ int sbbs_t::exec_misc(csi_t* csi, char *path)
 					if(i<cfg.total_prots)
 						if(external(cmdstr(j==SEND_FILE_VIA
 							? cfg.prot[i]->dlcmd : cfg.prot[i]->ulcmd,str,str,buf)
-							,EX_OUTL)==0)
+							,EX_OUTL
+#ifdef __unix__		/* file xfer progs use stdio on Unix */
+							|EX_INR|EX_OUTR
+#endif
+							)==0)
 							csi->logic=LOGIC_TRUE;
 					return(0);
 				case SEND_FILE_VIA_VAR:
@@ -983,7 +987,11 @@ int sbbs_t::exec_misc(csi_t* csi, char *path)
 					if(i<cfg.total_prots)
 						if(external(cmdstr(j==SEND_FILE_VIA_VAR
 							 ? cfg.prot[i]->dlcmd : cfg.prot[i]->ulcmd,*pp,*pp,buf)
-							,EX_OUTL)==0)
+							,EX_OUTL
+#ifdef __unix__		/* file xfer progs use stdio on Unix */
+							|EX_INR|EX_OUTR
+#endif
+							)==0)
 							csi->logic=LOGIC_TRUE;
 					return(0);