changeset 107546:59e2de1eaab1

* process.c (Fmake_network_process): Don't apply Bug#5173 fix for Windows.
author Chong Yidong <cyd@stupidchicken.com>
date Fri, 26 Mar 2010 20:45:32 -0400
parents 805495d3c451
children 87db339a9f55
files src/ChangeLog src/process.c
diffstat 2 files changed, 27 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Thu Mar 25 17:56:15 2010 +0900
+++ b/src/ChangeLog	Fri Mar 26 20:45:32 2010 -0400
@@ -1,3 +1,8 @@
+2010-03-27  Chong Yidong  <cyd@stupidchicken.com>
+
+	* process.c (Fmake_network_process): Don't apply Bug#5173 fix for
+	Windows.
+
 2010-03-25  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
 
 	* process.c (Fmake_network_process): Don't call turn_on_atimers around
--- a/src/process.c	Thu Mar 25 17:56:15 2010 +0900
+++ b/src/process.c	Fri Mar 26 20:45:32 2010 -0400
@@ -3534,6 +3534,8 @@
     {
       int optn, optbits;
 
+    retry_connect:
+
       s = socket (lres->ai_family, lres->ai_socktype, lres->ai_protocol);
       if (s < 0)
 	{
@@ -3636,12 +3638,14 @@
 #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 @@
 		       (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 @@
       specpdl_ptr = specpdl + count1;
       emacs_close (s);
       s = -1;
+
+#ifdef WINDOWSNT
+      if (xerrno == EINTR)
+	goto retry_connect;
+#endif
     }
 
   if (s >= 0)