1 --- curl-7.21.3/include/curl/multi.h~ 2010-09-18 23:00:21.000000000 +0200
2 +++ curl-7.21.3/include/curl/multi.h 2010-12-16 09:17:03.909735667 +0100
7 + /* Name: curl_multi_select()
9 + * Desc: Calls select() or poll() internally so app can call
10 + * curl_multi_perform() as soon as one of them is ready. This is to
11 + * fix FD_SETSIZE problem curl_multi_fdset() has.
13 + * Returns: CURLMcode type, general multi error code.
15 +CURL_EXTERN CURLMcode curl_multi_select(CURLM *multi_handle,
20 * Name: curl_multi_perform()
21 --- curl-7.21.3/lib/multi.c~ 2010-12-15 10:04:43.000000000 +0100
22 +++ curl-7.21.3/lib/multi.c 2010-12-16 09:20:29.652705567 +0100
29 #define _MPRINTF_REPLACE /* use our functions only */
30 #include <curl/mprintf.h>
35 +CURLMcode curl_multi_select(CURLM *multi_handle, int timeout_ms, int *ret) {
36 + struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
37 + struct Curl_one_easy *easy;
38 + curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
41 + unsigned int nfds = 0;
42 + struct pollfd *ufds;
45 + if(!GOOD_MULTI_HANDLE(multi))
46 + return CURLM_BAD_HANDLE;
48 + easy=multi->easy.next;
49 + while(easy != &multi->easy) {
50 + bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
52 + for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
53 + curl_socket_t s = CURL_SOCKET_BAD;
55 + if(bitmap & GETSOCK_READSOCK(i)) {
59 + if(bitmap & GETSOCK_WRITESOCK(i)) {
63 + if(s == CURL_SOCKET_BAD) {
68 + easy = easy->next; /* check next handle */
71 + ufds = (struct pollfd *)malloc(nfds * sizeof(struct pollfd));
74 + easy=multi->easy.next;
75 + while(easy != &multi->easy) {
76 + bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
78 + for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
79 + curl_socket_t s = CURL_SOCKET_BAD;
81 + if(bitmap & GETSOCK_READSOCK(i)) {
82 + ufds[nfds].fd = sockbunch[i];
83 + ufds[nfds].events = POLLIN;
87 + if(bitmap & GETSOCK_WRITESOCK(i)) {
88 + ufds[nfds].fd = sockbunch[i];
89 + ufds[nfds].events = POLLOUT;
93 + if(s == CURL_SOCKET_BAD) {
98 + easy = easy->next; /* check next handle */
101 + nret = Curl_poll(ufds, nfds, timeout_ms);
109 static CURLMcode multi_runsingle(struct Curl_multi *multi,
111 struct Curl_one_easy *easy)