diff options
-rw-r--r-- | docs/examples/10-at-a-time.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/docs/examples/10-at-a-time.c b/docs/examples/10-at-a-time.c index 41c2f4883..29c7f08d9 100644 --- a/docs/examples/10-at-a-time.c +++ b/docs/examples/10-at-a-time.c @@ -13,7 +13,10 @@ * 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; + } } } |