]> git.pld-linux.org Git - packages/curl.git/blame - libcurl.fb-changes.diff
- up to 7.21.3
[packages/curl.git] / libcurl.fb-changes.diff
CommitLineData
2e570606
ER
1Index: include/curl/multi.h
2===================================================================
3RCS file: /cvsroot/curl/curl/include/curl/multi.h,v
4retrieving revision 1.45
5diff -u -r1.45 multi.h
6--- include/curl/multi.h 20 May 2008 10:21:50 -0000 1.45
7+++ include/curl/multi.h 29 Jan 2010 23:45:18 -0000
8@@ -135,6 +135,19 @@
9 int *max_fd);
10
11 /*
12+ * Name: curl_multi_select()
13+ *
14+ * Desc: Calls select() or poll() internally so app can call
15+ * curl_multi_perform() as soon as one of them is ready. This is to
16+ * fix FD_SETSIZE problem curl_multi_fdset() has.
17+ *
18+ * Returns: CURLMcode type, general multi error code.
19+ */
20+CURL_EXTERN CURLMcode curl_multi_select(CURLM *multi_handle,
21+ int timeout_ms,
22+ int *ret);
23+
24+ /*
25 * Name: curl_multi_perform()
26 *
27 * Desc: When the app thinks there's data available for curl it calls this
28Index: lib/multi.c
29===================================================================
30RCS file: /cvsroot/curl/curl/lib/multi.c,v
31retrieving revision 1.210
32diff -u -r1.210 multi.c
33--- lib/multi.c 28 Jan 2010 15:34:18 -0000 1.210
34+++ lib/multi.c 29 Jan 2010 23:45:19 -0000
35@@ -42,6 +42,7 @@
36 #include "sendf.h"
37 #include "timeval.h"
38 #include "http.h"
39+#include "select.h"
40
41 #define _MPRINTF_REPLACE /* use our functions only */
42 #include <curl/mprintf.h>
43@@ -900,6 +901,80 @@
44 return CURLM_OK;
45 }
46
47+CURLMcode curl_multi_select(CURLM *multi_handle, int timeout_ms, int *ret) {
48+ struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
49+ struct Curl_one_easy *easy;
50+ curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
51+ int bitmap;
52+ int i;
53+ unsigned int nfds = 0;
54+ struct pollfd *ufds;
55+ int nret = -1;
56+
57+ if(!GOOD_MULTI_HANDLE(multi))
58+ return CURLM_BAD_HANDLE;
59+
60+ easy=multi->easy.next;
61+ while(easy != &multi->easy) {
62+ bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
63+
64+ for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
65+ curl_socket_t s = CURL_SOCKET_BAD;
66+
67+ if(bitmap & GETSOCK_READSOCK(i)) {
68+ ++nfds;
69+ s = sockbunch[i];
70+ }
71+ if(bitmap & GETSOCK_WRITESOCK(i)) {
72+ ++nfds;
73+ s = sockbunch[i];
74+ }
75+ if(s == CURL_SOCKET_BAD) {
76+ break;
77+ }
78+ }
79+
80+ easy = easy->next; /* check next handle */
81+ }
82+
83+ ufds = (struct pollfd *)malloc(nfds * sizeof(struct pollfd));
84+ nfds = 0;
85+
86+ easy=multi->easy.next;
87+ while(easy != &multi->easy) {
88+ bitmap = multi_getsock(easy, sockbunch, MAX_SOCKSPEREASYHANDLE);
89+
90+ for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
91+ curl_socket_t s = CURL_SOCKET_BAD;
92+
93+ if(bitmap & GETSOCK_READSOCK(i)) {
94+ ufds[nfds].fd = sockbunch[i];
95+ ufds[nfds].events = POLLIN;
96+ ++nfds;
97+ s = sockbunch[i];
98+ }
99+ if(bitmap & GETSOCK_WRITESOCK(i)) {
100+ ufds[nfds].fd = sockbunch[i];
101+ ufds[nfds].events = POLLOUT;
102+ ++nfds;
103+ s = sockbunch[i];
104+ }
105+ if(s == CURL_SOCKET_BAD) {
106+ break;
107+ }
108+ }
109+
110+ easy = easy->next; /* check next handle */
111+ }
112+
113+ nret = Curl_poll(ufds, nfds, timeout_ms);
114+ free(ufds);
115+ if (ret) {
116+ *ret = nret;
117+ }
118+ return CURLM_OK;
119+}
120+
121 static CURLMcode multi_runsingle(struct Curl_multi *multi,
122 struct Curl_one_easy *easy)
123 {
This page took 0.07134 seconds and 4 git commands to generate.