changeset 7486:cfe4840ffde9

(Fopen_network_stream): Call bind_polling_period; later unbind the binding. (POLL_FOR_INPUT): Define, if appropriate.
author Richard M. Stallman <rms@gnu.org>
date Fri, 13 May 1994 08:31:05 +0000
parents a1b7f72e0ea2
children a7ff1a4b4e21
files src/process.c
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/process.c	Fri May 13 08:29:22 1994 +0000
+++ b/src/process.c	Fri May 13 08:31:05 1994 +0000
@@ -211,6 +211,12 @@
 #define FD_ZERO(p) (*(p) = 0)
 #endif /* no FD_SET */
 
+/* If we support X Windows, turn on the code to poll periodically
+   to detect C-g.  It isn't actually used when doing interrupt input.  */
+#ifdef HAVE_X_WINDOWS
+#define POLL_FOR_INPUT
+#endif
+
 /* Mask of bits indicating the descriptors that we wait for input on */
 
 static SELECT_TYPE input_wait_mask;
@@ -1485,11 +1491,12 @@
   struct hostent host_info_fixed;
   struct gcpro gcpro1, gcpro2, gcpro3, gcpro4;
   int retry = 0;
+  int count = specpdl_ptr - specpdl;
 
   GCPRO4 (name, buffer, host, service);
   CHECK_STRING (name, 0);
   CHECK_STRING (host, 0);
-  if (XTYPE(service) == Lisp_Int)
+  if (XTYPE (service) == Lisp_Int)
     port = htons ((unsigned short) XINT (service));
   else
     {
@@ -1543,6 +1550,13 @@
   if (interrupt_input)
     unrequest_sigio ();
 
+  /* Slow down polling to every ten seconds.
+     Some kernels have a bug which causes retrying connect to fail
+     after a connect.  */
+#ifdef POLL_FOR_INPUT
+  bind_polling_period (10);
+#endif
+
  loop:
   if (connect (s, (struct sockaddr *) &address, sizeof address) == -1
       && errno != EISCONN)
@@ -1567,6 +1581,10 @@
 			 Fcons (host, Fcons (name, Qnil)));
     }
 
+#ifdef POLL_FOR_INPUT
+  unbind_to (count, Qnil);
+#endif
+
   if (interrupt_input)
     request_sigio ();