From c9ebbe5a537871cd34d8809f41a000468643e8d6 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 13 Aug 2004 22:06:23 +0000
Subject: [PATCH] Switch back to rcvtimeo based timeouts but have option to
 make type a preference (when prefereces are implemented)

---
 src/syncterm/rlogin.c | 22 ++++++++++++++++++----
 src/syncterm/rlogin.h |  1 +
 src/syncterm/term.c   |  4 +++-
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/src/syncterm/rlogin.c b/src/syncterm/rlogin.c
index 0ae44b150c..d3e261e0d6 100644
--- a/src/syncterm/rlogin.c
+++ b/src/syncterm/rlogin.c
@@ -5,6 +5,8 @@
 
 static SOCKET	rlogin_socket=INVALID_SOCKET;
 
+int	rcvtimeo=1;
+
 int rlogin_recv(char *buffer, size_t buflen)
 {
 	int	r;
@@ -51,7 +53,6 @@ int rlogin_connect(char *addr, int port, char *ruser, char *passwd, int bedumb)
 	char	nil=0;
 	char	*p;
 	unsigned int	neta;
-	unsigned long	l;
 
 	for(p=addr;*p;p++)
 		if(*p!='.' && !isdigit(*p))
@@ -93,9 +94,22 @@ int rlogin_connect(char *addr, int port, char *ruser, char *passwd, int bedumb)
 		return(-1);
 	}
 
-	l=1;
-	ioctlsocket(rlogin_socket, FIONBIO,&l);
-	/* fcntl(rlogin_socket, F_SETFL, fcntl(rlogin_socket, F_GETFL)|O_NONBLOCK); */
+	if(rcvtimeo) {
+		#ifdef _WIN32
+		int	tv=10;
+		#else
+		struct timeval tv;
+
+		tv.tv_sec=0;
+		tv.tv_usec=10000;
+		#endif
+
+		setsockopt(rlogin_socket,SOL_SOCKET,SO_RCVTIMEO,&tv,sizeof(tv));
+	}
+	else {
+		unsigned long	l=1;
+		ioctlsocket(rlogin_socket, FIONBIO,&l);
+	}
 
 	if(!bedumb) {
 		rlogin_send("",1,1000);
diff --git a/src/syncterm/rlogin.h b/src/syncterm/rlogin.h
index 3375654803..7db1ae18fe 100644
--- a/src/syncterm/rlogin.h
+++ b/src/syncterm/rlogin.h
@@ -4,6 +4,7 @@
 #include <sockwrap.h>
 
 extern SOCKET	rlogin_socket;
+extern int	rcvtimeo;
 
 int rlogin_recv(char *buffer, size_t buflen);
 int rlogin_send(char *buffer, size_t buflen, unsigned int timeout);
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index af5eb0bec7..648eefbf80 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -2,6 +2,7 @@
 #include <ciolib.h>
 #include <keys.h>
 
+#include "rlogin.h"
 #include "term.h"
 #include "uifcinit.h"
 #include "menu.h"
@@ -117,6 +118,7 @@ void doterm(void)
 					
 			}
 		}
-		SLEEP(1);
+		if(!rcvtimeo)
+			SLEEP(1);
 	}
 }
-- 
GitLab