]> code.delx.au - gnu-emacs/commitdiff
Prefer getsockopt to getpeername on non-MS-Windows
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 10 Jun 2016 06:11:40 +0000 (23:11 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 10 Jun 2016 06:12:07 +0000 (23:12 -0700)
* admin/CPP-DEFINES: Remove HAVE_GETPEERNAME.
* configure.ac: Don’t check for getpeername.
* src/process.c (wait_reading_process_output) [!WINDOWSNT]:
Use getsockopt even if not GNU/Linux, as the platforms where
getsockopt used to hang are no doubt long dead.

admin/CPP-DEFINES
configure.ac
src/process.c

index d9df152bff5a8c916823d2a9400d84b7460c305e..c7ec8ce6fed80eb2768ee4ad5d78c5251462f6a8 100644 (file)
@@ -156,7 +156,6 @@ HAVE_GETLOADAVG
 HAVE_GETOPT_H
 HAVE_GETOPT_LONG_ONLY
 HAVE_GETPAGESIZE
-HAVE_GETPEERNAME
 HAVE_GETPT
 HAVE_GETPWENT
 HAVE_GETRLIMIT
index a367582f2abeaf41b47bed91799111c02529811a..069a7260e88dd372fce9fbdf852ace225d3bfd36 100644 (file)
@@ -3848,7 +3848,7 @@ lrand48 random rint \
 select getpagesize setlocale newlocale \
 getrlimit setrlimit shutdown \
 pthread_sigmask strsignal setitimer \
-sendto recvfrom getsockname getpeername getifaddrs freeifaddrs \
+sendto recvfrom getsockname getifaddrs freeifaddrs \
 gai_strerror sync \
 getpwent endpwent getgrent endgrent \
 cfmakeraw cfsetspeed copysign __executable_start log2)
index 5e06ccccac8a4cf024a3f095447ec610c3179756..4d287d8cc517809291e2bf188f58090c0dd28199 100644 (file)
@@ -5492,15 +5492,16 @@ wait_reading_process_output (intmax_t time_limit, int nsecs, int read_kbd,
 
              p = XPROCESS (proc);
 
-#ifdef GNU_LINUX
-             /* getsockopt(,,SO_ERROR,,) is said to hang on some systems.
-                So only use it on systems where it is known to work.  */
+#ifndef WINDOWSNT
              {
                socklen_t xlen = sizeof (xerrno);
                if (getsockopt (channel, SOL_SOCKET, SO_ERROR, &xerrno, &xlen))
                  xerrno = errno;
              }
 #else
+             /* On MS-Windows, getsockopt clears the error for the
+                entire process, which may not be the right thing; see
+                w32.c.  Use getpeername instead.  */
              {
                struct sockaddr pname;
                socklen_t pnamelen = sizeof (pname);