@@ -18,6 +18,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
18
18
*/
19
19
20
20
#include " socket.h" // for select()
21
+ #include " porting.h" // for sleep_ms()
21
22
#include " httpfetch.h"
22
23
#include < iostream>
23
24
#include < sstream>
@@ -520,19 +521,26 @@ class CurlFetchThread : public JThread
520
521
select_timeout = timeout;
521
522
522
523
if (select_timeout > 0 ) {
523
- select_tv.tv_sec = select_timeout / 1000 ;
524
- select_tv.tv_usec = (select_timeout % 1000 ) * 1000 ;
525
- int retval = select (max_fd + 1 , &read_fd_set,
526
- &write_fd_set, &exc_fd_set,
527
- &select_tv);
528
- if (retval == -1 ) {
529
- #ifdef _WIN32
530
- errorstream<<" select returned error code "
531
- <<WSAGetLastError ()<<std::endl;
532
- #else
533
- errorstream<<" select returned error code "
534
- <<errno<<std::endl;
535
- #endif
524
+ // in Winsock it is forbidden to pass three empty
525
+ // fd_sets to select(), so in that case use sleep_ms
526
+ if (max_fd == -1 ) {
527
+ select_tv.tv_sec = select_timeout / 1000 ;
528
+ select_tv.tv_usec = (select_timeout % 1000 ) * 1000 ;
529
+ int retval = select (max_fd + 1 , &read_fd_set,
530
+ &write_fd_set, &exc_fd_set,
531
+ &select_tv);
532
+ if (retval == -1 ) {
533
+ #ifdef _WIN32
534
+ errorstream<<" select returned error code "
535
+ <<WSAGetLastError ()<<std::endl;
536
+ #else
537
+ errorstream<<" select returned error code "
538
+ <<errno<<std::endl;
539
+ #endif
540
+ }
541
+ }
542
+ else {
543
+ sleep_ms (select_timeout);
536
544
}
537
545
}
538
546
}
0 commit comments