diff --git a/src/modules/files/configure.in b/src/modules/files/configure.in
index ae1086db06deb070e199aa31dc2f03ef615f96f1..22324b4c4eb63346d169d3b16c5023a2bfdf15f7 100644
--- a/src/modules/files/configure.in
+++ b/src/modules/files/configure.in
@@ -199,7 +199,6 @@ AC_TRY_RUN([
 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/wait.h>
-#include <signal.h>
 #include <netinet/in.h>
 #include <errno.h>
 #include <unistd.h>
@@ -214,20 +213,31 @@ AC_TRY_RUN([
 int main()
 {
   fd_set tmp;
+  struct timeval foo;
   int fds[2];
+
   if(socketpair(AF_UNIX, SOCK_STREAM, 0, fds)<0)
     exit(1);
 
-  while(write(fds[0],"foo",3)<0 && errno==EINTR);
+  shutdown(fds[1],1);
+  shutdown(fds[0],1);
+  close(fds[0]);
+
+  foo.tv_sec=5;
+  foo.tv_usec=0;
 
   FD_ZERO(&tmp);
   FD_SET(fds[1], &tmp);
-  alarm(5);
-  if(select(fds[1]+1,&tmp, 0,0,0)>0 && FD_ISSET(fds[1], &tmp))
-    exit(0);
-  exit(1);
+  if(select(fds[1]+1,&tmp, 0,0,&foo)<=0)
+    exit(2);
+
+  if(!FD_ISSET(fds[1], &tmp))
+    exit(3);
+
+  exit(0);
 }
 
+
 ],pike_cv_select_on_unix_sockets=yes,pike_cv_select_on_unix_sockets=no)
 ])