Don't lock up at start when there aren't any free file descriptors.
authorDan Fandrich <dan@coneharvesters.com>
Tue, 28 Feb 2006 18:21:33 +0000 (18:21 +0000)
committerDan Fandrich <dan@coneharvesters.com>
Tue, 28 Feb 2006 18:21:33 +0000 (18:21 +0000)
src/main.c

index 88282a0..aca7aa3 100644 (file)
@@ -4279,8 +4279,11 @@ quit_curl:
   return res;
 }
 
-static void checkfds(void);
-
+/* Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are
+   open before starting to run.  Otherwise, the first three network
+   sockets opened by curl could be used for input sources, downloaded data
+   or error logs as they will effectively be stdin, stdout and/or stderr.
+*/
 static void checkfds(void)
 {
 #ifdef HAVE_PIPE
@@ -4291,8 +4294,9 @@ static void checkfds(void)
          fd[1] == STDIN_FILENO ||
          fd[1] == STDOUT_FILENO ||
          fd[1] == STDERR_FILENO )
-    pipe(fd);
-
+    if (pipe(fd) < 0)
+      return;  /* Out of handles. This isn't really a big problem now, but
+                   will be when we try to create a socket later. */
   close(fd[0]);
   close(fd[1]);
 #endif