Mercurial > emacs
comparison src/process.c @ 58072:4ebc52bf6429
(Fmake_network_process): Remove kludge for interrupted
connects on BSD. If connect is interrupted, just close socket and
start over rather than sleeping and retry with same socket.
author | Kim F. Storm <storm@cua.dk> |
---|---|
date | Tue, 09 Nov 2004 09:40:37 +0000 |
parents | 8abbe69dfdb2 |
children | bcfa2be2012e |
comparison
equal
deleted
inserted
replaced
58071:253aa382ba57 | 58072:4ebc52bf6429 |
---|---|
3021 | 3021 |
3022 for (lres = res; lres; lres = lres->ai_next) | 3022 for (lres = res; lres; lres = lres->ai_next) |
3023 { | 3023 { |
3024 int optn, optbits; | 3024 int optn, optbits; |
3025 | 3025 |
3026 retry_connect: | |
3027 | |
3026 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol); | 3028 s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol); |
3027 if (s < 0) | 3029 if (s < 0) |
3028 { | 3030 { |
3029 xerrno = errno; | 3031 xerrno = errno; |
3030 continue; | 3032 continue; |
3099 report_file_error ("Cannot listen on server socket", Qnil); | 3101 report_file_error ("Cannot listen on server socket", Qnil); |
3100 | 3102 |
3101 break; | 3103 break; |
3102 } | 3104 } |
3103 | 3105 |
3104 retry_connect: | |
3105 | |
3106 immediate_quit = 1; | 3106 immediate_quit = 1; |
3107 QUIT; | 3107 QUIT; |
3108 | 3108 |
3109 /* This turns off all alarm-based interrupts; the | 3109 /* This turns off all alarm-based interrupts; the |
3110 bind_polling_period call above doesn't always turn all the | 3110 bind_polling_period call above doesn't always turn all the |
3142 #endif | 3142 #endif |
3143 #endif | 3143 #endif |
3144 | 3144 |
3145 immediate_quit = 0; | 3145 immediate_quit = 0; |
3146 | 3146 |
3147 if (xerrno == EINTR) | |
3148 goto retry_connect; | |
3149 if (xerrno == EADDRINUSE && retry < 20) | |
3150 { | |
3151 /* A delay here is needed on some FreeBSD systems, | |
3152 and it is harmless, since this retrying takes time anyway | |
3153 and should be infrequent. */ | |
3154 Fsleep_for (make_number (1), Qnil); | |
3155 retry++; | |
3156 goto retry_connect; | |
3157 } | |
3158 | |
3159 /* Discard the unwind protect closing S. */ | 3147 /* Discard the unwind protect closing S. */ |
3160 specpdl_ptr = specpdl + count1; | 3148 specpdl_ptr = specpdl + count1; |
3161 emacs_close (s); | 3149 emacs_close (s); |
3162 s = -1; | 3150 s = -1; |
3151 | |
3152 if (xerrno == EINTR) | |
3153 goto retry_connect; | |
3163 } | 3154 } |
3164 | 3155 |
3165 if (s >= 0) | 3156 if (s >= 0) |
3166 { | 3157 { |
3167 #ifdef DATAGRAM_SOCKETS | 3158 #ifdef DATAGRAM_SOCKETS |