1 /*****************************************************************************
3 * Project ___| | | | _ \| |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
15 #define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
16 #define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
19 * Get a single URL without select().
28 double connect_time = 0.0;
29 struct timeval mp_start;
30 char mp_timedout = FALSE;
32 if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
33 fprintf(stderr, "curl_global_init() failed\n");
34 return TEST_ERR_MAJOR_BAD;
37 if ((c = curl_easy_init()) == NULL) {
38 fprintf(stderr, "curl_easy_init() failed\n");
39 curl_global_cleanup();
40 return TEST_ERR_MAJOR_BAD;
43 test_setopt(c, CURLOPT_HEADER, 1L);
44 test_setopt(c, CURLOPT_URL, URL);
46 if ((m = curl_multi_init()) == NULL) {
47 fprintf(stderr, "curl_multi_init() failed\n");
49 curl_global_cleanup();
50 return TEST_ERR_MAJOR_BAD;
53 if ((res = (int)curl_multi_add_handle(m, c)) != CURLM_OK) {
54 fprintf(stderr, "curl_multi_add_handle() failed, "
55 "with code %d\n", res);
56 curl_multi_cleanup(m);
58 curl_global_cleanup();
59 return TEST_ERR_MAJOR_BAD;
63 mp_start = tutil_tvnow();
66 res = (int)curl_multi_perform(m, &running);
67 if (tutil_tvdiff(tutil_tvnow(), mp_start) >
68 MULTI_PERFORM_HANG_TIMEOUT) {
73 fprintf(stderr, "nothing left running.\n");
79 if (mp_timedout) fprintf(stderr, "mp_timedout\n");
80 fprintf(stderr, "ABORTING TEST, since it seems "
81 "that it would have run forever.\n");
82 res = TEST_ERR_RUNS_FOREVER;
85 curl_easy_getinfo(c, CURLINFO_CONNECT_TIME, &connect_time);
86 if (connect_time <= 0.0) {
87 fprintf(stderr, "connect time is <=0.0\n");
88 res = TEST_ERR_MAJOR_BAD;
94 curl_multi_remove_handle(m, c);
95 curl_multi_cleanup(m);
98 curl_global_cleanup();