test536: do not fail with threaded DNS resolver
Also tweaked comments in certain examples using curl_multi_fdset().
This commit is contained in:
parent
71be565cf4
commit
d487ade72c
4
CHANGES
4
CHANGES
@ -6,6 +6,10 @@
|
|||||||
|
|
||||||
Changelog
|
Changelog
|
||||||
|
|
||||||
|
Kamil Dudka (24 Apr 2010)
|
||||||
|
- Fixed test536 in order to not fail with threaded DNS resolver and tweaked
|
||||||
|
comments in certain examples using curl_multi_fdset().
|
||||||
|
|
||||||
Daniel Stenberg (21 Apr 2010)
|
Daniel Stenberg (21 Apr 2010)
|
||||||
- The -O option caused curl to crash on windows and DOS due to the tool
|
- The -O option caused curl to crash on windows and DOS due to the tool
|
||||||
writing out of boundary memory.
|
writing out of boundary memory.
|
||||||
|
@ -131,7 +131,6 @@ fill_buffer(URL_FILE *file,int want,int waittime)
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -144,6 +143,7 @@ fill_buffer(URL_FILE *file,int want,int waittime)
|
|||||||
/* attempt to fill buffer */
|
/* attempt to fill buffer */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
int maxfd = -1;
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
FD_ZERO(&fdexcep);
|
FD_ZERO(&fdexcep);
|
||||||
@ -156,8 +156,10 @@ fill_buffer(URL_FILE *file,int want,int waittime)
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
so that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially
|
||||||
|
in case of (maxfd == -1), we call select(0, ...), which is basically
|
||||||
|
equal to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ int main(int argc, char **argv)
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
int maxfd = -1;
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
@ -80,8 +80,10 @@ int main(int argc, char **argv)
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1 so
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ int main(int argc, char **argv)
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
int maxfd = -1;
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
@ -154,8 +154,10 @@ int main(int argc, char **argv)
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
so that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ int main(int argc, char **argv)
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
int maxfd = -1;
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
@ -71,8 +71,10 @@ int main(int argc, char **argv)
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1 so
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ int main(int argc, char *argv[])
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
int maxfd = -1;
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
@ -91,8 +91,10 @@ int main(int argc, char *argv[])
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
so that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ int main(int argc, char **argv)
|
|||||||
fd_set fdread;
|
fd_set fdread;
|
||||||
fd_set fdwrite;
|
fd_set fdwrite;
|
||||||
fd_set fdexcep;
|
fd_set fdexcep;
|
||||||
int maxfd;
|
int maxfd = -1;
|
||||||
|
|
||||||
FD_ZERO(&fdread);
|
FD_ZERO(&fdread);
|
||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
@ -65,8 +65,10 @@ int main(int argc, char **argv)
|
|||||||
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
|
|
||||||
/* In a real-world program you OF COURSE check the return code of the
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
function calls, *and* you make sure that maxfd is bigger than -1 so
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
that the call to select() below makes sense! */
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
static CURLMcode perform(CURLM * multi)
|
static CURLMcode perform(CURLM * multi)
|
||||||
{
|
{
|
||||||
int handles, maxfd;
|
int handles;
|
||||||
CURLMcode code;
|
CURLMcode code;
|
||||||
fd_set fdread, fdwrite, fdexcep;
|
fd_set fdread, fdwrite, fdexcep;
|
||||||
struct timeval mp_start;
|
struct timeval mp_start;
|
||||||
@ -31,6 +31,9 @@ static CURLMcode perform(CURLM * multi)
|
|||||||
mp_start = tutil_tvnow();
|
mp_start = tutil_tvnow();
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
static struct timeval timeout = /* 100 ms */ { 0, 100000L };
|
||||||
|
int maxfd = -1;
|
||||||
|
|
||||||
code = curl_multi_perform(multi, &handles);
|
code = curl_multi_perform(multi, &handles);
|
||||||
if (tutil_tvdiff(tutil_tvnow(), mp_start) >
|
if (tutil_tvdiff(tutil_tvnow(), mp_start) >
|
||||||
MULTI_PERFORM_HANG_TIMEOUT) {
|
MULTI_PERFORM_HANG_TIMEOUT) {
|
||||||
@ -53,9 +56,14 @@ static CURLMcode perform(CURLM * multi)
|
|||||||
FD_ZERO(&fdwrite);
|
FD_ZERO(&fdwrite);
|
||||||
FD_ZERO(&fdexcep);
|
FD_ZERO(&fdexcep);
|
||||||
curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
|
curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
|
||||||
if (maxfd < 0)
|
|
||||||
return (CURLMcode) ~CURLM_OK;
|
/* In a real-world program you OF COURSE check the return code of the
|
||||||
if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, 0) == -1)
|
function calls. On success, the value of maxfd is guaranteed to be
|
||||||
|
greater or equal than -1. We call select(maxfd + 1, ...), specially in
|
||||||
|
case of (maxfd == -1), we call select(0, ...), which is basically equal
|
||||||
|
to sleep. */
|
||||||
|
|
||||||
|
if (select(maxfd + 1, &fdread, &fdwrite, &fdexcep, &timeout) == -1)
|
||||||
return (CURLMcode) ~CURLM_OK;
|
return (CURLMcode) ~CURLM_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user