(Fprocess_send_eof): Use shutdown, if it's a socket.
authorRichard M. Stallman <rms@gnu.org>
Thu, 19 Jun 1997 03:03:08 +0000 (03:03 +0000)
committerRichard M. Stallman <rms@gnu.org>
Thu, 19 Jun 1997 03:03:08 +0000 (03:03 +0000)
Don't close the output descriptor if that is also the input descriptor.

src/process.c

index 4ad8fe2..bed3e38 100644 (file)
@@ -3618,7 +3618,16 @@ text to PROCESS after you call this function.")
     send_process (proc, "\004", 1, Qnil);
   else
     {
-      close (XINT (XPROCESS (proc)->outfd));
+      /* If this is a network connection, or socketpair is used
+        for communication with the subprocess, call shutdown to cause EOF.
+        (In some old system, shutdown to socketpair doesn't work.
+        Then we just can't win.)  */
+      if (NILP (XPROCESS (proc)->pid)
+         || XINT (XPROCESS (proc)->outfd) == XINT (XPROCESS (proc)->infd))
+       shutdown (XINT (XPROCESS (proc)->outfd), 1);
+      /* In case of socketpair, outfd == infd, so don't close it.  */
+      if (XINT (XPROCESS (proc)->outfd) != XINT (XPROCESS (proc)->infd))
+       close (XINT (XPROCESS (proc)->outfd));
       XSETINT (XPROCESS (proc)->outfd, open (NULL_DEVICE, O_WRONLY));
     }
 #endif /* VMS */