errrno can by freak accident become EINTR on DOS or
Windows (unrelated to select). select() can never set errno to EINTR on Windows.
This commit is contained in:
Родитель
cf51f7fb65
Коммит
f5b8a26d9a
12
lib/select.c
12
lib/select.c
|
@ -39,13 +39,17 @@
|
|||
#error "We can't compile without select() support!"
|
||||
#endif
|
||||
|
||||
#include "select.h"
|
||||
|
||||
#ifdef __BEOS__
|
||||
/* BeOS has FD_SET defined in socket.h */
|
||||
#include <socket.h>
|
||||
#endif
|
||||
|
||||
#include <curl/curl.h>
|
||||
|
||||
#include "urldata.h"
|
||||
#include "connect.h"
|
||||
#include "select.h"
|
||||
|
||||
#ifdef WIN32
|
||||
#define VALID_SOCK(s) (1) /* Win-sockets are not in range [0..FD_SETSIZE> */
|
||||
#else
|
||||
|
@ -148,7 +152,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
|
|||
|
||||
do {
|
||||
r = select(maxfd + 1, &fds_read, &fds_write, &fds_err, &timeout);
|
||||
} while((r == -1) && (errno == EINTR));
|
||||
} while((r == -1) && (Curl_ourerrno() == EINTR));
|
||||
|
||||
if (r < 0)
|
||||
return -1;
|
||||
|
@ -233,7 +237,7 @@ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
|
|||
|
||||
do {
|
||||
r = select(maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout);
|
||||
} while((r == -1) && (errno == EINTR));
|
||||
} while((r == -1) && (Curl_ourerrno() == EINTR));
|
||||
|
||||
if (r < 0)
|
||||
return -1;
|
||||
|
|
Загрузка…
Ссылка в новой задаче