Index: /trunk/src/sh_sub.c
===================================================================
--- /trunk/src/sh_sub.c	(revision 323)
+++ /trunk/src/sh_sub.c	(revision 324)
@@ -453,5 +453,7 @@
   if (retval < 0)
     {
+      int error = errno;
       sh_kill_sub();
+      errno = error;
       sflag = 1;
       goto end;
@@ -466,10 +468,16 @@
 
   do {
-    retval = poll(&pfds, 1, 1000);
+    retval = poll(&pfds, 1, 300 * 1000);
   } while (retval < 0 && errno == EINTR);
 
+#ifndef ETIMEDOUT
+#define ETIMEDOUT EIO
+#endif
+
   if (retval <= 0)
     {
+      int error = errno;
       sh_kill_sub();
+      errno = (retval == 0) ? ETIMEDOUT : error;
       sflag = -1;
       goto end;
@@ -483,5 +491,7 @@
   if (retval < 0)
     {
+      int error = errno;
       sh_kill_sub();
+      errno = error;
       sflag = 1;
       goto end;
