From: Chong Yidong Date: Sat, 27 Mar 2010 00:45:32 +0000 (-0400) Subject: * process.c (Fmake_network_process): Don't apply Bug#5173 fix for Windows. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~438^2~654 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=649dbf36cdf3ce38a3fc0d08a814d299e9f72d8c;p=emacs.git * process.c (Fmake_network_process): Don't apply Bug#5173 fix for Windows. --- diff --git a/src/ChangeLog b/src/ChangeLog index 789a4d93e44..7aae2a3754f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-03-27 Chong Yidong + + * process.c (Fmake_network_process): Don't apply Bug#5173 fix for + Windows. + 2010-03-25 YAMAMOTO Mitsuharu * process.c (Fmake_network_process): Don't call turn_on_atimers around diff --git a/src/process.c b/src/process.c index 268a3ad7bab..4f103752296 100644 --- a/src/process.c +++ b/src/process.c @@ -3534,6 +3534,8 @@ usage: (make-network-process &rest ARGS) */) { int optn, optbits; + retry_connect: + s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol); if (s < 0) { @@ -3636,12 +3638,14 @@ usage: (make-network-process &rest ARGS) */) #endif #endif #endif + +#ifndef WINDOWSNT if (xerrno == EINTR) { /* Unlike most other syscalls connect() cannot be called again. (That would return EALREADY.) The proper way to wait for completion is select(). */ - int sc; + int sc, len; SELECT_TYPE fdset; retry_select: FD_ZERO (&fdset); @@ -3651,23 +3655,23 @@ usage: (make-network-process &rest ARGS) */) (EMACS_TIME *)0); if (sc == -1) { - if (errno == EINTR) + if (errno == EINTR) goto retry_select; - else + else report_file_error ("select failed", Qnil); } eassert (sc > 0); - { - int len = sizeof xerrno; - eassert (FD_ISSET (s, &fdset)); - if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) == -1) - report_file_error ("getsockopt failed", Qnil); - if (xerrno != 0) - errno = xerrno, report_file_error ("error during connect", Qnil); - else - break; - } + + len = sizeof xerrno; + eassert (FD_ISSET (s, &fdset)); + if (getsockopt (s, SOL_SOCKET, SO_ERROR, &xerrno, &len) == -1) + report_file_error ("getsockopt failed", Qnil); + if (xerrno) + errno = xerrno, report_file_error ("error during connect", Qnil); + else + break; } +#endif /* !WINDOWSNT */ immediate_quit = 0; @@ -3675,6 +3679,11 @@ usage: (make-network-process &rest ARGS) */) specpdl_ptr = specpdl + count1; emacs_close (s); s = -1; + +#ifdef WINDOWSNT + if (xerrno == EINTR) + goto retry_connect; +#endif } if (s >= 0)