1 /*****************************************************************************
3 * Project ___| | | | _ \| |
5 * | (__| |_| | _ <| |___
6 * \___|\___/|_| \_\_____|
13 #include <sys/types.h>
20 #define MAIN_LOOP_HANG_TIMEOUT 90 * 1000
21 #define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000
23 static CURLMcode perform(CURLM * multi)
27 fd_set fdread, fdwrite, fdexcep;
28 struct timeval mp_start;
29 char mp_timedout = FALSE;
32 mp_start = tutil_tvnow();
35 code = curl_multi_perform(multi, &handles);
36 if (tutil_tvdiff(tutil_tvnow(), mp_start) >
37 MULTI_PERFORM_HANG_TIMEOUT) {
47 case CURLM_CALL_MULTI_PERFORM:
56 curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
58 return (CURLMcode) ~CURLM_OK;
59 if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, 0) == -1)
60 return (CURLMcode) ~CURLM_OK;
63 /* We only reach this point if (mp_timedout) */
64 if (mp_timedout) fprintf(stderr, "mp_timedout\n");
65 fprintf(stderr, "ABORTING TEST, since it seems "
66 "that it would have run forever.\n");
67 return (CURLMcode) ~CURLM_OK;
76 if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
77 fprintf(stderr, "curl_global_init() failed\n");
78 return TEST_ERR_MAJOR_BAD;
81 if ((multi = curl_multi_init()) == NULL) {
82 fprintf(stderr, "curl_multi_init() failed\n");
83 curl_global_cleanup();
84 return TEST_ERR_MAJOR_BAD;
87 if ((easy = curl_easy_init()) == NULL) {
88 fprintf(stderr, "curl_easy_init() failed\n");
89 curl_multi_cleanup(multi);
90 curl_global_cleanup();
91 return TEST_ERR_MAJOR_BAD;
94 curl_multi_setopt(multi, CURLMOPT_PIPELINING, 1L);
96 test_setopt(easy, CURLOPT_WRITEFUNCTION, fwrite);
97 test_setopt(easy, CURLOPT_FAILONERROR, 1L);
98 test_setopt(easy, CURLOPT_URL, URL);
100 if (curl_multi_add_handle(multi, easy) != CURLM_OK) {
101 printf("curl_multi_add_handle() failed\n");
102 res = TEST_ERR_MAJOR_BAD;
104 if (perform(multi) != CURLM_OK)
105 printf("retrieve 1 failed\n");
107 curl_multi_remove_handle(multi, easy);
109 curl_easy_reset(easy);
111 test_setopt(easy, CURLOPT_FAILONERROR, 1L);
112 test_setopt(easy, CURLOPT_URL, libtest_arg2);
114 if (curl_multi_add_handle(multi, easy) != CURLM_OK) {
115 printf("curl_multi_add_handle() 2 failed\n");
116 res = TEST_ERR_MAJOR_BAD;
118 if (perform(multi) != CURLM_OK)
119 printf("retrieve 2 failed\n");
121 curl_multi_remove_handle(multi, easy);
126 curl_easy_cleanup(easy);
127 curl_multi_cleanup(multi);
128 curl_global_cleanup();
130 printf("Finished!\n");