From: Richard M. Stallman Date: Fri, 13 May 1994 08:31:05 +0000 (+0000) Subject: (Fopen_network_stream): Call bind_polling_period; later unbind the binding. X-Git-Tag: emacs-19.34~8367 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=44ade2e9490108a2c17c6f53d0de33ee8b8b52d1;p=emacs.git (Fopen_network_stream): Call bind_polling_period; later unbind the binding. (POLL_FOR_INPUT): Define, if appropriate. --- diff --git a/src/process.c b/src/process.c index b7bca471230..44a7d843a29 100644 --- a/src/process.c +++ b/src/process.c @@ -211,6 +211,12 @@ static int update_tick; #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 @@ Fourth arg SERVICE is name of the service desired, or an integer\n\ 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 @@ Fourth arg SERVICE is name of the service desired, or an integer\n\ 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 @@ Fourth arg SERVICE is name of the service desired, or an integer\n\ Fcons (host, Fcons (name, Qnil))); } +#ifdef POLL_FOR_INPUT + unbind_to (count, Qnil); +#endif + if (interrupt_input) request_sigio ();