doom3-gpl
Doom 3 GPL source release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
multi-single.c
Go to the documentation of this file.
1 /*****************************************************************************
2  * _ _ ____ _
3  * Project ___| | | | _ \| |
4  * / __| | | | |_) | |
5  * | (__| |_| | _ <| |___
6  * \___|\___/|_| \_\_____|
7  *
8  * $Id: multi-single.c,v 1.3 2003/01/09 11:42:07 bagder Exp $
9  *
10  * This is a very simple example using the multi interface.
11  */
12 
13 #include <stdio.h>
14 #include <string.h>
15 
16 /* somewhat unix-specific */
17 #include <sys/time.h>
18 #include <unistd.h>
19 
20 /* curl stuff */
21 #include <curl/curl.h>
22 
23 /*
24  * Simply download a HTTP file.
25  */
26 int main(int argc, char **argv)
27 {
28  CURL *http_handle;
30 
31  int still_running; /* keep number of running handles */
32 
33  http_handle = curl_easy_init();
34 
35  /* set the options (I left out a few, you'll get the point anyway) */
36  curl_easy_setopt(http_handle, CURLOPT_URL, "http://www.haxx.se/");
37 
38  /* init a multi stack */
39  multi_handle = curl_multi_init();
40 
41  /* add the individual transfers */
42  curl_multi_add_handle(multi_handle, http_handle);
43 
44  /* we start some action by calling perform right away */
46  curl_multi_perform(multi_handle, &still_running));
47 
48  while(still_running) {
49  struct timeval timeout;
50  int rc; /* select() return code */
51 
52  fd_set fdread;
53  fd_set fdwrite;
54  fd_set fdexcep;
55  int maxfd;
56 
57  FD_ZERO(&fdread);
58  FD_ZERO(&fdwrite);
59  FD_ZERO(&fdexcep);
60 
61  /* set a suitable timeout to play around with */
62  timeout.tv_sec = 1;
63  timeout.tv_usec = 0;
64 
65  /* get file descriptors from the transfers */
66  curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
67 
68  rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
69 
70  switch(rc) {
71  case -1:
72  /* select error */
73  break;
74  case 0:
75  default:
76  /* timeout or readable/writable sockets */
78  curl_multi_perform(multi_handle, &still_running));
79  break;
80  }
81  }
82 
83  curl_multi_cleanup(multi_handle);
84 
85  curl_easy_cleanup(http_handle);
86 
87  return 0;
88 }
CURLMcode curl_multi_fdset(CURLM *multi_handle, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd)
Definition: multi.c:231
long tv_sec
Definition: timeval.h:37
CURLcode curl_easy_setopt(CURL *curl, CURLoption option,...)
Definition: easy.c:217
long tv_usec
Definition: timeval.h:38
CURLM * multi_handle
Definition: fopen.c:81
#define select(args...)
Definition: amigaos.h:39
CURLM * curl_multi_init(void)
Definition: multi.c:114
CURLMcode curl_multi_cleanup(CURLM *multi_handle)
Definition: multi.c:583
int main(int argc, char **argv)
Definition: multi-single.c:26
CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
Definition: multi.c:306
void CURLM
Definition: multi.h:76
void CURL
Definition: types.h:25
CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle)
Definition: multi.c:134
void curl_easy_cleanup(CURL *curl)
Definition: easy.c:288
CURL * curl_easy_init(void)
Definition: easy.c:195