11
multi = curl_multi_init();
13
curls=curl_easy_init();
26
struct timeval ml_start;
27
struct timeval mp_start;
28
char ml_timedout = FALSE;
29
char mp_timedout = FALSE;
31
if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
32
fprintf(stderr, "curl_global_init() failed\n");
33
return TEST_ERR_MAJOR_BAD;
36
if ((multi = curl_multi_init()) == NULL) {
37
fprintf(stderr, "curl_multi_init() failed\n");
38
curl_global_cleanup();
39
return TEST_ERR_MAJOR_BAD;
42
if ((curls = curl_easy_init()) == NULL) {
43
fprintf(stderr, "curl_easy_init() failed\n");
44
curl_multi_cleanup(multi);
45
curl_global_cleanup();
46
return TEST_ERR_MAJOR_BAD;
14
49
curl_easy_setopt(curls, CURLOPT_URL, URL);
15
curl_multi_add_handle(multi, curls);
17
while ( CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi, &still_running) );
18
while(still_running) {
51
if ((res = curl_multi_add_handle(multi, curls)) != CURLM_OK) {
52
fprintf(stderr, "curl_multi_add_handle() failed, "
53
"with code %d\n", res);
54
curl_easy_cleanup(curls);
55
curl_multi_cleanup(multi);
56
curl_global_cleanup();
57
return TEST_ERR_MAJOR_BAD;
61
mp_start = tutil_tvnow();
64
res = curl_multi_perform(multi, &still_running);
65
if (tutil_tvdiff(tutil_tvnow(), mp_start) >
66
MULTI_PERFORM_HANG_TIMEOUT) {
70
} while (res == CURLM_CALL_MULTI_PERFORM);
73
ml_start = tutil_tvnow();
75
while ((!ml_timedout) && (!mp_timedout) && (still_running)) {
19
76
struct timeval timeout;
28
86
timeout.tv_sec = 1;
29
87
timeout.tv_usec = 0;
89
if (tutil_tvdiff(tutil_tvnow(), ml_start) >
90
MAIN_LOOP_HANG_TIMEOUT) {
30
95
curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
31
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
96
rc = select_test(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
37
while (CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi, &still_running));
103
mp_start = tutil_tvnow();
105
res = curl_multi_perform(multi, &still_running);
106
if (tutil_tvdiff(tutil_tvnow(), mp_start) >
107
MULTI_PERFORM_HANG_TIMEOUT) {
111
} while (res == CURLM_CALL_MULTI_PERFORM);
41
msg = curl_multi_info_read(multi, &still_running);
43
/* this should now contain a result code from the easy handle,
115
if (ml_timedout || mp_timedout) {
116
if (ml_timedout) fprintf(stderr, "ml_timedout\n");
117
if (mp_timedout) fprintf(stderr, "mp_timedout\n");
118
fprintf(stderr, "ABORTING TEST, since it seems "
119
"that it would have run forever.\n");
120
i = TEST_ERR_RUNS_FOREVER;
123
msg = curl_multi_info_read(multi, &still_running);
125
/* this should now contain a result code from the easy handle,
127
i = msg->data.result;
47
130
curl_multi_cleanup(multi);
48
131
curl_easy_cleanup(curls);
132
curl_global_cleanup();
50
134
return i; /* return the final return code */