diff --git a/docs/libcurl/curl_multi_wait.3 b/docs/libcurl/curl_multi_wait.3 index ad97d47c5..b14760bf3 100644 --- a/docs/libcurl/curl_multi_wait.3 +++ b/docs/libcurl/curl_multi_wait.3 @@ -43,6 +43,9 @@ similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call. On completion, if \fInumfds\fP is supplied, it will be populated with the number of file descriptors on which interesting events occured. +If no extra file descriptors are provided and libcurl has no file descriptor +to offer to wait for, this function will return immediately. + This function is encouraged to be used instead of select(3) when using the multi interface to allow applications to easier circumvent the common problem with 1024 maximum file descriptors. @@ -67,6 +70,6 @@ events such as the socket being clear to write without blocking. CURLMcode type, general libcurl multi interface error code. See \fIlibcurl-errors(3)\fP .SH AVAILABILITY -This function was added in libcurl 7.28.0 +This function was added in libcurl 7.28.0. .SH "SEE ALSO" .BR curl_multi_fdset "(3), " curl_multi_perform "(3)" diff --git a/lib/multi.c b/lib/multi.c index 6506b5ee4..938846769 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -1024,8 +1024,12 @@ CURLMcode curl_multi_wait(CURLM *multi_handle, ++nfds; } - /* wait... */ - i = Curl_poll(ufds, nfds, timeout_ms); + if(nfds) + /* wait... */ + i = Curl_poll(ufds, nfds, timeout_ms); + else + i = 0; + free(ufds); if(ret) *ret = i;