Mercurial > emacs
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 ();