]> granicus.if.org Git - curl/commitdiff
James Bursa's improvement
authorDaniel Stenberg <daniel@haxx.se>
Wed, 27 Jun 2007 21:35:17 +0000 (21:35 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 27 Jun 2007 21:35:17 +0000 (21:35 +0000)
docs/examples/10-at-a-time.c

index 41c2f4883fb4310092e9a7467daa1ac136c2538b..29c7f08d96b9ae736e447fad80cc2bf3b5ae537e 100644 (file)
  * Written by Michael Wallner
  */
 
+#include <errno.h>
 #include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
 #include <curl/multi.h>
 
 static const char *urls[] = {
@@ -106,6 +109,10 @@ int main(void)
 
   cm = curl_multi_init();
 
+  /* we can optionally limit the total amount of connections this multi handle
+     uses */
+  curl_multi_setopt(cm, CURLMOPT_MAXCONNECTS, MAX);
+
   for (C = 0; C < MAX; ++C) {
     init(cm, C);
   }
@@ -123,20 +130,24 @@ int main(void)
         return EXIT_FAILURE;
       }
 
-      /* In a real-world program you OF COURSE check the return that maxfd is
-         bigger than -1 so that the call to select() below makes sense! */
-
       if (curl_multi_timeout(cm, &L)) {
         fprintf(stderr, "E: curl_multi_timeout\n");
         return EXIT_FAILURE;
       }
-
-      T.tv_sec = L/1000;
-      T.tv_usec = (L%1000)*1000;
-
-      if (0 > select(M+1, &R, &W, &E, &T)) {
-        fprintf(stderr, "E: select\n");
-        return EXIT_FAILURE;
+      if (L == -1)
+        L = 100;
+
+      if (M == -1) {
+        sleep(L / 1000);
+      } else {
+        T.tv_sec = L/1000;
+        T.tv_usec = (L%1000)*1000;
+
+        if (0 > select(M+1, &R, &W, &E, &T)) {
+          fprintf(stderr, "E: select(%i,,,,%li): %i: %s\n",
+              M+1, L, errno, strerror(errno));
+          return EXIT_FAILURE;
+        }
       }
     }