# HG changeset patch # User Richard M. Stallman # Date 768817865 0 # Node ID cfe4840ffde9e6d3901e2ce16e5ed02d79132dd2 # Parent a1b7f72e0ea22d6380cf4ef3835151f763662a58 (Fopen_network_stream): Call bind_polling_period; later unbind the binding. (POLL_FOR_INPUT): Define, if appropriate. diff -r a1b7f72e0ea2 -r cfe4840ffde9 src/process.c --- 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 ();